我有一个重写的 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/