Что касается моего опыта, то в GM нет простых встроенных решений для этого. К сожалению, единственное интерактивное событие, которое GMSMarker
объекты позволяют вам отслеживать (почти без задержек), - это простое нажатие, которое вызывает соответствующий обратный вызов в делегате mapView. Если вы хотите что-то более сложное, вам нужно реализовать что-то с вашим собственным пользовательским представлением маркера, расположенным над картой, при выполнении операции перетаскивания. Вот алгоритм:
1) Добавьте UIPanGestureRecognizer
к mapView. Установите его делегат для разрешения конфликтов с помощью встроенных в MapView gestRecognizer.
2) Когда вы начинаете панорамирование, в gestureRecognizerShouldBegin
решите, применяет ли пользователь панорамирование к карте или к маркеру. Если маркер, позвольте panGR стрелять (return true
).
3) Скрыть GMSMarker
объект, который вы хотите переместить (установите непрозрачность на ноль или просто удалите с карты)
4) Вставьте свой собственный независимый MarkerView (который визуально дублирует удаленный на шаге 3) под положение пальца
5) Переместите этот пользовательский вид с обновлениями panGR.
6) При отпускании пальца замените пользовательский MarkerView на GMSMarkerView
на последнем месте пальца, чтобы прикрепить карту обратно.