objective-c - UIGestureRecognizers 冲突

标签 objective-c ios uigesturerecognizer

我有一个重写的 UIGestureRecogniser 设计用于检测 2 次触摸,但不一定是一个接一个地检测。

我有:

- (BOOL)canBePreventedByGestureRecognizer:(UIGestureRecognizer *)preventingGestureRecognizer
{
    if ([preventingGestureRecognizer isKindOfClass:[UIRotationGestureRecognizer class]])
    {
        self.state = UIGestureRecognizerStateCancelled;
        return YES;
    }

    if ([preventingGestureRecognizer isKindOfClass:[UISwipeGestureRecognizer class]])
    {
        self.state = UIGestureRecognizerStateCancelled;
        return YES;
    }

    //Will prevent a conflict with a 2 finger touch only.   
    if ([preventingGestureRecognizer isKindOfClass:[UITapGestureRecognizer class]])
    {
        if (preventingGestureRecognizer.numberOfTouches == 2)
        {
            self.state = UIGestureRecognizerStateCancelled;
            return YES;
        }  
        return NO;
    }
    self.state = UIGestureRecognizerStateRecognized;
    return NO;
}

在我的 MVC 中,我还有一个旋转手势识别器。我的问题是它们相互矛盾。我的 doubleTap 手势识别器正在调用它的 Action @selector 当它应该被上面的方法阻止时。

看起来上面的方法没有被调用。我认为这是因为当两根手指接触执行旋转时有以下代码:

- (void)secondTouchRecived
{
    self.state = UIGestureRecognizerStateRecognized;
}

调用 UIGestureResponders 操作方法并绕过预防方法。我尝试将其更改为 UIGestureRecogniserStateBegan 但这似乎也绕过了预防方法。

最佳答案

如何通过将旋转、滑动和点击手势识别器传递到 requireGestureRecognizerToFail: 在您的自定义手势识别器上来指定依赖项?这将阻止您的手势识别器在旋转识别器有机会处理触摸之前转换到 Recognized 状态。

关于objective-c - UIGestureRecognizers 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11098808/

相关文章:

objective-c - Youtube API 视频时长格式

ios - UIButton 子类标题更改

objective-c - 自定义按钮的标题

objective-c - 如何更改 NSScrollView 默认文本并使其不可编辑

objective-c - didReceiveAuthenticationChallenge 未被调用

ios - 在具有部分索引的 UITableView 上使用从右到左的 UIScreenEdgePanGestureRecognizer

ios - 将完成处理程序中的值存储到变量中

ios - 发送按钮不发送

objective-c - 检测自定义表格单元格内多个 UI View 的点击/触摸的理想方法是什么?

ios - 捕获手势识别器开始状态的 Swift 惯用方法