Я работал над похожим функционалом и могу поделиться некоторыми деталями.Короче говоря, похоже, что нет опции, позволяющей отслеживать положение предварительного просмотра.
С моей точки зрения, я бы не стал полагаться на кадр предварительного просмотра.В некоторых случаях система может сделать предварительный просмотр меньшим или большим, чем исходный вид.Например, это может произойти, когда начальный размер перетаскиваемого изображения больше, чем его размер.В этом случае система сделает предварительный просмотр меньшим, чтобы улучшить видимость перетаскиваемого содержимого.И это поведение не предсказуемо, система может применить такое преобразование, основываясь на некоторой внутренней логике.
Я думаю, что это работает потому, что механизм перетаскивания позволяет перемещать элементы не только внутри одного конкретного приложения, но и между другими приложениями.Поскольку механизм перетаскивания должен быть отдельным системным процессом, который обрабатывает все операции перетаскивания, включая изменение размера и положения предварительного просмотра.
Во время операции перетаскивания система создает либо оригинальный снимок представления, либо снимок возвращенного представления.from previewProvider из UIDragItem
.
Затем он создает представление контейнера (экземпляр закрытого UIPortalView
класса с CAPortalLayer
снизу), устанавливает снимок в этот контейнер и отображает представление контейнера.С этого момента позиция предварительного просмотра обрабатывается системой, и нет общедоступного API для доступа к этому представлению.
Единственный возможный способ отследить позицию перетаскивания - использовать функцию location(in view: UIView)
протокола UIDragDropSession
.
Надеюсь, это поможет.