iOS 捏合手势与滑动手势冲突

Posted

技术标签:

【中文标题】iOS 捏合手势与滑动手势冲突【英文标题】:iOS Pinch Gesture conflicts with Swipe Gesture 【发布时间】:2015-01-12 02:57:17 【问题描述】:

我创建了两个滑动识别器:swipeRightRecognizer & swipeLeftRecognizer 和一个捏识别器:pinchRecognizer

当我捏合/捏出时,捏合事件和向左滑动识别器事件都被捕获。

我试过了

[swipeLeftRecognizer requireGestureRecognizerToFail:pinchRecognizer];
[swipeRightRecognizer requireGestureRecognizerToFail:pinchRecognizer];

但它不起作用。

如果没有更好的方法,我打算捕捉触摸次数。我需要区分单指滑动和捏合。

有没有一种简单的方法可以区分捏合手势和滑动?

【问题讨论】:

有点过时了:在touchBegan 中计算touches 怎么样? 我对手势识别器不太熟悉。只是想知道是否有一种简单的方法可以区分捏和滑动。如果没有,如果没有更简单的方法,这就是我打算做的,计算触摸次数。 我在下面发布了一个更好的方法。 【参考方案1】:

According to the docs requireGestureRecognizerToFail: 表示第一个手势只能正常进行如果第二个手势失败;所以在这种情况下,由于您没有指定第二个手势将失败的任何地方,第一个手势将失败,第二个手势将正常进行。这不是你想要的。

相反,您可以使用shouldBeRequiredToFailByGestureRecognizer: UIGestureRecognizerDelegate 方法告诉滑动手势在捏合的情况下失败,例如:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
    if ([gestureRecognizer isKindOfClass:[UISwipeGestureRecognizer class]] && 
        [otherGestureRecognizer isKindOfClass:[UIPinchGestureRecognizer class]]) 
        return YES;
    

    return NO;

【讨论】:

我发现一个隐藏的错误以某种方式导致捏干扰了滑动。在我修复了那个错误之后,捏和滑动可以很好地协同工作。无论如何,谢谢你的建议。下次是否需要使用shouldBeRequiredToFailByGestureRecognizer,记得加这个UIGestureRecognizerDelegate方法。这当然是一种更好的方法。

以上是关于iOS 捏合手势与滑动手势冲突的主要内容,如果未能解决你的问题,请参考以下文章

UITableView滑动删除iOS上的手势冲突

Angular 2 RC 2 使用移动手势(滑动、捏合、旋转)

iOS解决嵌套在ScrollView中的TableView滑动手势冲突问题

iOS多手势冲突问题

UIScrollView 滑动手势与右滑返回冲突

UIView滑动手势与目标c中的tableview冲突