UIDragInteraction / UIDropItem получить кадр предварительного просмотра - PullRequest
0 голосов
/ 12 марта 2020

В настоящее время я пытаюсь получить кадр моего предварительного просмотра объекта взаимодействия перетаскивания. Я могу определить положение моего пальца благодаря:

- (CGPoint)locationInView:(UIView *)view;

Я просмотрел все и не могу найти способ доступа к объекту предварительного просмотра или к ссылке на кадр. Кто-нибудь понял это?

1 Ответ

0 голосов
/ 13 марта 2020

Понял это - я обнаружил, что есть метод, вызываемый после фактической функции удаления, которая предоставляет объект UITargetedDragPreview. Таким образом, моя логика c заключается в том, чтобы сохранить сеанс отбрасывания и взаимодействие, а затем вызвать мою функцию «обновления» при вызове этой функции предварительного просмотра.

Сначала я создаю некоторые переменные для будущего использования:

CGRect destinationFrame;                //  destination frame.
UIDropInteraction *storedInteraction;   //  stored interaction.
id <UIDropSession> storedSession;       //  stored session.
- (UITargetedDragPreview *)dropInteraction:(UIDropInteraction *)interaction previewForDroppingItem:(UIDragItem *)item withDefault:(UITargetedDragPreview *)defaultPreview {

   if (!item.localObject) { return nil; }

    CGPoint center = defaultPreview.target.center;
    CGPoint converted = [defaultPreview.target.container convertPoint:center toView:<TARGETVIEW>];
    CGPoint origin = CGPointMake(converted.x - (defaultPreview.view.frame.size.width / 2), converted.y - (defaultPreview.view.frame.size.height / 2));

    self->destinationFrame = CGRectMake(origin.x, origin.y, defaultPreview.view.frame.size.width, defaultPreview.view.frame.size.height);

    if (self->storedSession && self->storedInteraction) {
        [self performDropWithInteraction:self->storedInteraction session:self->storedSession];
    }

    return nil;

}

- (void)dropInteraction:(UIDropInteraction *)interaction performDrop:(id<UIDropSession>)session {
    self->storedInteraction = interaction;
    self->storedSession = session;
}

- (void)performDropWithInteraction:(UIDropInteraction *)interaction session:(id<UIDropSession>)session {
   //  this where I will perform my actual drop, I get the frame with:
   //  self->destinationFrame.
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...