iOS:如何在MKMapView上添加三次点击手势识别器?

5
我有一个MKMapView,双击可以放大地图(默认行为)。我想在地图上添加三击手势识别器,以便再次缩小到某个初始缩放级别。
问题是内置的双击识别器会首先触发。为了延迟双击识别器,必须以某种方式访问它,但至少在iOS6中,view属性gestureRecognizers不包含地图视图的双击识别器。
那么,有没有办法延迟双击识别器,以允许三击识别器先触发?

可能是禁用MKMapView中的双击缩放(iOS 6)的重复问题。 - matt
1
在引用链接中所给出的答案依赖于访问地图视图的gestureRecognizers属性,但在iOS6中显然不再可能这样做。 - Reinhard Männer
我明白,但我认为这说明了苹果不希望你做你想要做的事情。 - matt
1个回答

7
请查看 UIGestureRecognizer 类中的实例方法requireGestureRecognizerToFail
详见http://developer.apple.com/library/ios/documentation/uikit/reference/UIGestureRecognizer_Class/Reference/Reference.html#//apple_ref/occ/instm/UIGestureRecognizer/requireGestureRecognizerToFail
该方法创建了当前手势识别器和另一个手势识别器之间的依赖关系。
例如:
[doubleTap requireGestureRecognizerToFail:tripleTap];

更新

在尝试多次后,我已经将其设置为以下形式(假设您拥有一个名为mapViewMKMapView):

UITapGestureRecognizer *tripleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTripleTap:)];
tripleTap.numberOfTapsRequired = 3;
[mapView.subviews[0] addGestureRecognizer:tripleTap];

UIView *tempMapView = mapView.subviews[0];
NSArray *mapGestures = tempMapView.gestureRecognizers;
UITapGestureRecognizer *tempMapDoubleTap = mapGestures[0];
[tempMapDoubleTap requireGestureRecognizerToFail:tripleTap];
NSLog(@"%@", mapGestures);

三击选择器:

- (void)handleTripleTap:(UIGestureRecognizer *)gestureRecognizer {
    NSLog(@"Triple Tap Detected..");
}

现在双击仍会缩放MKMapView,三连击成功执行handleTripleTap且不缩放。

1
谢谢你的回答。我也考虑过这个问题。问题是我不知道如何访问内置的双击识别器。 - Reinhard Männer
啊,我没有意识到按照@matt上面的评论所建议的做法已经被苹果禁止了。真遗憾!我会进一步调查这个问题,如果有发现什么新情况,我会再次发布。 - rog
@ReinhardMänner,我已经解决了 - 请看我的更新帖子。希望这可以帮到你! - rog
非常感谢,你太棒了!它起作用了。我从来没有想过这个解决方案。 - Reinhard Männer
这次对你的帮助比几个月前(UIButton背景)更多,我很高兴。 - rog
啊!这也是你发现的!谢谢提醒!希望我也能在某个时候帮到你。 - Reinhard Männer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接