5

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

4

1 回答 1

7

查看类中的实例requireGestureRecognizerToFail方法UIGestureRecognizer

http://developer.apple.com/library/ios/documentation/uikit/reference/UIGestureRecognizer_Class/Reference/Reference.html#//apple_ref/occ/instm/UIGestureRecognizer/requireGestureRecognizerToFail

在接收器和另一个手势识别器之间创建依赖关系。

例如:

[doubleTap requireGestureRecognizerToFail:tripleTap];

更新

在玩了一会儿之后,我让它像这样工作(假设你有一个MKMapViewnamed mapView):

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而无需缩放。

于 2013-05-15T17:32:24.953 回答