Понял это - я обнаружил, что есть метод, вызываемый после фактической функции удаления, которая предоставляет объект 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.
}