MKMapView拒绝单点触控

时间:2016-10-18 09:34:53

标签: objective-c mkmapview uigesturerecognizer

我需要允许双指捏/旋转/平移并拒绝单指平移。

我已经尝试过一些方法来实现这个目标:

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

但这不起作用。也许是某种UIGestureRecognizer失败的依赖?

1 个答案:

答案 0 :(得分:1)

找到了不错的解决方案:

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;
}