I'm having a strange problem with capturing drag/pan gestures on a GMSMapView through a Gesture Recognizer. This problem surfaced only after updating from GMS 1.2 to 1.3.1, where (quoting the documentation),
Touches are consumed more agressively by GMSMapView
I have a UIViewController holding a GMSMapView under its main view. I found GMSMapDelegate does not provide methods for handling drag/pan gestures, so I added a UIPanGestureRecognizer to the UIViewController, linked it to an IBAction selector, and set referencing outlet and outlet collection, as per the screenshot linked here: https://i.sstatic.net/gktoa.png
So any drag action would simply trigger the recognizeDragOnMap:
selector, as below:
-(IBAction)recognizeDragOnMap:(id)sender {
NSLog(@"recognizeDragOnMap");
UIGestureRecognizer *gestureRecognizer = (UIGestureRecognizer *)sender;
if (gestureRecognizer.state != UIGestureRecognizerStateEnded) {
NSLog(@"Still dragging");
return;
}
NSLog(@"DragEnded");
GMSCameraPosition *position;
if ((position = self.mapView.camera)) {
self.automaticCameraPositionChange = NO;
CLLocationCoordinate2D coordinate = [position targetAsCoordinate];
CLLocation *location = [[CLLocation alloc] initWithLatitude:coordinate.latitude longitude:coordinate.longitude];
[self.origin dragPinToLocation:location];
} else {
NSLog(@"No map camera");
}
}
This setup used to work perfectly under GMS 1.2.0. After the update, the GMSMapView responds to the gestures like it used to, however the method above never gets called!
Anyone have an idea what's up and/or how to fix it?
mapView: didChangeCameraPosition:
, but that's not sufficient: I need to be able to distinguish between camera updates generated by gestures on the map and those generated by other operations. – Tambourine