如何手动取消MKMapView标准手势识别器

时间:2014-01-06 15:25:01

标签: ios mkmapview uigesturerecognizer

我正在制作我在地图上的自定义手势。长按2秒后它应该可以工作。一切都很好,但经过长时间的按手势我移动手指和地图跟着他们...我需要逃避这一点。我试过了:

self.mapView.userInteractionEnabled = NO;

但似乎没有用......

3 个答案:

答案 0 :(得分:1)

在我们的自定义self.measureGestureRecognizer尝试识别手势时收集识别器:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    if (gestureRecognizer == self.measureGestureRecognizer)
    {
        if (self.otherGestureRecognizers == nil)
            self.otherGestureRecognizers = [NSMutableSet set];
        [self.otherGestureRecognizers addObject:otherGestureRecognizer];
    }
    return YES;
}

当我需要取消所有手势识别器时:

self.mapView.userInteractionEnabled = NO;
for (UIGestureRecognizer *gr in self.otherGestureRecognizers) {
    if (gr.enabled) {
        gr.enabled = NO;
        gr.enabled = YES;
    }
}

答案 1 :(得分:0)

工作方式。收集所有关于UIMapView手势识别器的工作:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    if (gestureRecognizer == self.myLongPressGestureRecognizer
        && otherGestureRecognizer != self.myPanGestureRecognizer)
    {
        if (self.otherGestureRecognizers == nil)
            self.otherGestureRecognizers = [NSMutableSet set];
        [self.otherGestureRecognizers addObject:otherGestureRecognizer];
    }
    return YES;
}

当你的手势识别器被识别时取消它们:

- (IBAction)measureLongPressed:(UILongPressGestureRecognizer *)recognizer
{
    if (recognizer.state == UIGestureRecognizerStateBegan)
    {
        self.mapView.userInteractionEnabled = NO;
        for (UIGestureRecognizer *gr in self.otherGestureRecognizers)
        {
            gr.enabled = NO;
            gr.enabled = YES;
        }
        self.otherGestureRecognizers = nil;

        [self myLongPressDetectedAndMapFreezed];
        return;
    }
}

答案 2 :(得分:0)

您可以执行以下操作(Swift 4)

guard   let splitPanGesture = splitVc.view.gestureRecognizers?.first(where: { ($0 as? UIPanGestureRecognizer) != nil }),
        let mapPanGesture = mapView.subviews.first?.gestureRecognizers?.first(where: { ($0 as? UIPanGestureRecognizer) != nil }) else { return }

splitPanGesture.require(toFail: mapPanGesture)