UIGestureRecognizers冲突

时间:2012-06-19 10:07:51

标签: 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手势识别器在应该通过上述方法阻止它时调用其动作@selector

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

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

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

1 个答案:

答案 0 :(得分:1)

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