在MKMapView(iOS 6)中禁用双击缩放

在ios 5中,我可以通过用新的双击手势覆盖它来禁用双击缩放。 但是似乎双击手势已经不在mkmapview附带的gesturerecognizer数组中。

NSArray *gestureRecognizers = [_mapView gestureRecognizers]; for (UIGestureRecognizer *recognizer in gestureRecognizers) { NSLog(@"%@", recognizer); } 

在ios 6中没有任何返回,在ios 5中它将返回2个识别器,一个用于单击,另一个用于双击。

我会通过MKMapView的子视图的手势识别器。 它可能还在那里。

当然,搞乱另一个视图的遗传资源是有点可疑,并可能会打破下一次苹果改变一些关于MKMapView的…

编辑:为了读者的利益, 检查它是一个UITapGestureRecognizernumberOfTapsRequired == 2numberOfTouchesRequired == 1

此外,不是完全禁用地图上的双击,而是考虑在注记上添加双击GR,然后执行[mapDoubleTapGR requireGestureRecognizerToFail:annotationDoubleTapGR] 。 再一次,哈西 – 不要怪我,如果它在下一个操作系统更新中断!

你想让用户对视图做任何事吗? 如果不是,则将userInteractionEnabled设置为NO就足够了。 如果是这样,你需要什么具体的互动? 一切只是双击? 为什么禁用这一个交互?

我们对您的用例了解得越多,我们可以提供的答案就越好。

这工作对我来说:[_mapView.subviews [0] addGestureRecognizer:MyDoubleTapOverrider];

这适用于我:

  //INIT the MKMapView -(id) init{ ... [self getGesturesRecursive:mapView]; ... } 

然后让recursion函数遍历子视图并findGR:s。

  -(void)getGesturesRecursive:(UIView*)v{ NSArray *gestureRecognizers = [v gestureRecognizers]; for (UIGestureRecognizer *recognizer in gestureRecognizers) { if ([recognizer isKindOfClass:[UITapGestureRecognizer class]]) { [v removeGestureRecognizer:recognizer]; } } for (UIView *v1 in v.subviews){ [self getGesturesRecursive:v1]; } } 

这个例子删除所有tap-GR:s。 但我想你可以指定删除任何你想要的。

您可以使用长按手势代替,这是有效的。