Вам приходится иметь дело с двумя контроллерами представления, один из которых находится в фоновом режиме, называемый mainController, и один, представленный с использованием UIPopoverViewController
, называемый popoverController. Ваш popoverController может добавить UIPanGestureRecognizer
к представлениям, которые пользователь может перетаскивать. Целью действия gestRecognizer может быть метод в popoverController.
Как только пользователь запускает операцию перетаскивания, ваш метод действия вызывается с параметром gestRecognizer в качестве аргумента, где состояние gestRecognizer равно UIGestureRecognizerStateBegan
. Вы могли бы затем сохранить текущий кадр представления, чтобы иметь возможность анимировать его обратно, когда сбой не удастся. Возможно, потребуется переместить представление в другое суперпредставление (например, в окно), потому что я не уверен, что UIPopoverViewController clipsToBounds его представления.
Когда пользователь перетаскивает, ваш метод действия вызывается снова и снова с gestRecognizer в состоянии UIGestureRecognizerStateChanged
. Используйте метод translationInView:
для UIPanGestureRecognizer
, чтобы определить, насколько пользователь перетянул, и соответственно обновите центр / кадр / преобразование перетаскиваемых изображений.
Как только пользователь поднимает палец, последний раз вызывается метод действия с состоянием gestRecoginzers, установленным на UIGestureRecognizerStateEnded
. Теперь пришло время узнать, было ли перетаскивание успешным. Например, popoverController может запросить mainController через делегирование, есть ли цель перетаскивания под текущей позицией представлений, если это так, mainController может предпринять действие, иначе popoverController будет анимировать перетаскиваемое представление обратно в исходное состояние и добавить его обратно подвид его мнению.
Надеюсь, это как-то понятно и полезно.