MKMapView 拒绝单点触摸平移

MKMapView to deny single touch panning

我需要允许双指pinch/rotate/panning并拒绝单指平移。

我已经尝试了一些方法来实现这一点:

for (UIPanGestureRecognizer *pan in mapView.gestureRecognizers) {
    if ([pan isKindOfClass:[UIPanGestureRecognizer class]]) {
        if ([pan minimumNumberOfTouches] < 2) {
            [pan setMinimumNumberOfTouches:2];
        }
    }
}

但这行不通。也许是某种 UIGestureRecognizer 失败的依赖?

刚找到好的解决方案:

self.twoFingerPan = [[UIPanGestureRecognizer alloc] init];
self.twoFingerPan.maximumNumberOfTouches = 1;
self.twoFingerPan.delegate = self;
[self addGestureRecognizer:self.twoFingerPan];

...

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    if (gestureRecognizer == self.twoFingerPan &&
        [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] &&
        (otherGestureRecognizer.view == self.mapView ||
         otherGestureRecognizer.view.superview == self.mapView)) {
        return YES;
    }
    return NO;
}

以及允许任何外部滚动的补充:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    if (gestureRecognizer == self.twoFingerPan &&
        [otherGestureRecognizer.view isKindOfClass:[UIScrollView class]]) {
        return YES;
    }
    return NO;
}