Подтвердить что ты не робот

Карта Google iOS - Как узнать, когда пользователь начинает или прекращает перетаскивать карту

Я разрабатываю с помощью Google map SDK 6.1. Я хочу знать, когда пользователь начинает перетаскивать или останавливать перетаскивание карты, я только что нашел 2 функции делегата: didChangeCameraPosition и idleAtCameraPosition. Есть ли способ поймать, когда пользователь начинает или останавливает перетаскивание карты?

4b9b3361

Ответ 1

Чтобы определить, перетащил ли пользователь карту, я думаю, что лучше использовать этот метод делегата

Obj-C

- (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture

Swift

func mapView(_ mapView: GMSMapView, willMove gesture: Bool)

и проверьте, является ли аргумент gesture true или нет.


didChangeCameraPosition вызывается, как уже упоминалось, много раз, но так как он также вызывается как путем установки центра карты из кода, так и в результате жеста, вы не сможете увидеть разницу в этом методе в одиночку.

Ответ 2

Из документации :

- (void) mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)position 

Вызывается, когда карта бездействует, после любых выдающихся жестов или анимации (или после явной настройки камеры).

Таким образом, с этим делегатом вы можете снимать, когда пользователь перестал перетаскивать mapView.

Чтобы получить уведомление, когда пользователь начал перетаскивать, просто используйте другого делегата, которого вы указали:

- (void) mapView:(GMSMapView *)mapView didChangeCameraPosition:(GMSCameraPosition *)position 

Вызывается повторно во время любой анимации или жестов на карте (или один раз, если камера явно установлена).

Это не может быть вызвано для всех промежуточных положений камеры. Он всегда вызывается для конечной позиции анимации или жеста.

Я не уверен, что тебя смущает.

Ответ 3

Swift 4:

func mapView(_ mapView: GMSMapView, willMove gesture: Bool) {
    if (gesture){
        print("dragged")
    }
}

Ответ 4

Остерегайтесь idleAtCameraPosition - это когда карта перестает двигаться, когда вы поднимаете палец.

Мне пришлось подклассифицировать GSMapView и добавить PanGestureRecognizer → State ENDED, чтобы получить при поднятии пальца.

https://github.com/clearbrian/GoogleMapiOS_TapEndedGesture