GMSMapView touchesbegan выстрелил только один раз


Я пытаюсь расширить GMSMapView, чтобы создать некоторые функции кластеризации, и мне нужно определить, когда пользователь перемещает карту, чтобы отключить визуализацию кластера и снова включить ее, когда он ее закончит.

Я переопределил touchesbegan и touchesended, но touchesbegan вызывается только один раз. После переопределения hittest я смог увидеть, что GMSVectorMapView обрабатывает касания GMSMapView, и если я изменю возврат этой функции, карта не будет двигаться.

Есть ли способ захватить это события или дать какое-то действие, когда пользователь взаимодействует с картой.

С Наилучшими Пожеланиями, Пина Тожале Марлон

2 7

2 ответа:

Я не уверен, что полностью понимаю, какие прикосновения вам нужно обнаружить или почему/как вы должны их обнаружить. Однако у меня была аналогичная проблема с обнаружением пользовательских жестов панорамирования поверх GMSMapView из-за touchesbegan: вызывается только один раз.

У меня была своя кнопка "текущее местоположение", которая позволяет пользователю переключать центрирование карты на их местоположение вкл/выкл. Мне нужно было выяснить, когда пользователь "панорамирует" карту, не прерывая прием карты панорамирования (я все еще хотел, чтобы карта в пан, а также).

Сначала я создал карту:

// Creates Map centered at current location
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:theLocationManager.location.coordinate.latitude 
                                                        Longitude:theLocationManager.location.coordinate.longitude
                                                             zoom:15];
theMapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
theMapView.myLocationEnabled = YES;
theMapView.delegate = self;
theMapView.camera = camera;
self.view = theMapView;
Затем я создал распознаватель жестов pan и добавил его в свойство распознавателей жестов theMapView. Я убедился, что установил цель в selfс помощью метода селектора didPan:
// Watch for pan
UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget: self action:@selector(didPan:)];
theMapView.gestureRecognizers = @[panRecognizer];

Наконец, в том же главном файле я реализовал метод didPan:, чтобы реагировать, когда пользователь панорамирует:

- (void) didPan:(UIPanGestureRecognizer*) gestureRecognizer
{
    NSLog(@"DID PAN");
    // React here to user's pan 
}

Последнее обновление есть метод делегата в Google maps

- (void)mapView:(GMSMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate;