Я пробовал несколько вещей, и публикация кода на этом этапе, вероятно, вводит в заблуждение, поэтому позвольте мне начать с концепции.
Мне нужно как-то объединить операции длительного нажатия и перетаскивания в одну операцию, что-то вроде LongPressThenDragGestureRecognizer. Я пытаюсь сделать это в MKMapView, поэтому я не могу просто отключить взаимодействие с пользователем все время, потому что мне нужны функции панорамирования и масштабирования карты.
Чтобы немного усложнить ситуацию, необходимо удалить начальный элемент (объект MKOverlay), на который пользователь долго нажимает, чтобы распознать взаимодействие, и заменить его новым нарисованным объектом. В этот момент код больше не заботится об объекте, только там, где палец находится в любой заданной точке (я буду перерисовывать перетаскиваемый объект по мере его движения).
Это рабочий процесс:
- Пользователь получает оверлей на карте
- Пользователь касается и удерживает элемент, чтобы приложение знало, что оно хочет перетащить его
- Приложение заменяет наложение нарисованным объектом и отключает карту, чтобы оно не начинало панорамирование (а не перетаскивание).
- Пользователь перетаскивает палец, и объект перерисовывается при движении.
- Пользователь поднимает палец, чтобы завершить перетаскивание
- Приложение заменяет нарисованный объект новым наложением карты
- Приложение позволяет взаимодействовать с пользователем на карте, позволяя выбирать панорамирование / масштабирование / аннотации и т. Д.
Я пробовал несколько вещей, но без особого успеха. Лучшие результаты, которые у меня есть, перечислены ниже. Это было сделано с помощью UILongPressGestureRecognizer на объектах MKMapView (проверка пересечения с наложением), а затем переопределив touchesBegan для перетаскивания карты.
- Отображается оверлей, и пользователь успешно выполняет жест длинного нажатия, который распознается соответствующим образом
- Взаимодействие пользователя с картой отключено, а наложение заменено нарисованным объектом
- Пользователь должен поднять палец и снова коснуться, чтобы начать операцию перетаскивания
- Когда пользователь поднимает палец, рисуется новое наложение и снова включается взаимодействие с картой
Я так близко, я просто не знаю, как объединить жесты, чтобы пользователю не нужно было поднимать палец и снова касаться, чтобы начать перетаскивание.
Любые идеи приветствуются.