【发布时间】:2013-07-02 00:43:08
【问题描述】:
我在通过手势识别器在 GMSMapView 上捕获拖动/平移手势时遇到了一个奇怪的问题。此问题仅在从 GMS 1.2 更新到 1.3.1 后才出现,其中(引用 documentation),
GMSMapView 更积极地消耗触摸
我有一个 UIViewController 在其主视图下持有一个 GMSMapView。我发现 GMSMapDelegate 没有提供处理拖动/平移手势的方法,所以我在 UIViewController 中添加了一个 UIPanGestureRecognizer,将其链接到 IBAction 选择器,并设置引用插座和插座集合,根据此处链接的屏幕截图:http://i.stack.imgur.com/gktoa.png
因此,任何拖动操作都会触发recognizeDragOnMap: 选择器,如下所示:
-(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");
}
}
此设置曾经在 GMS 1.2.0 下完美运行。更新后,GMSMapView 会像以前一样响应手势,但是上面的方法永远不会被调用!
任何人都知道发生了什么和/或如何解决它?
【问题讨论】:
-
非常偏执,我做了以下测试: 1) 在另一个没有 GMSMapView 的 UIViewController 上设置了一个等效的 UIPanGestureRecognizer ...你瞧,工作顺利。 2) 将我的项目恢复到 1.3.1 之前的提交,也可以顺利运行。
-
另外——我知道
mapView: didChangeCameraPosition:,但这还不够:我需要能够区分由地图上的手势和其他操作生成的相机更新。
标签: ios cocoa google-maps-sdk-ios xcode-storyboard