如何在UIView中优先考虑手势识别器和触摸

从阅读UIGestureRecognizer类参考意味着API将为您处理触摸和手势控制的优先级,确保您的touchesBegan和相关方法不会在视图上调用,除非手势识别器首先失败:

窗口在将触摸事件传送到附加到手势识别器的命中testing视图之前将其传送给手势识别器。 通常,如果手势识别器分析多点触摸序列中的触摸stream并且不识别其手势,则该视图接收全部的触摸。 如果手势识别器识别其手势,则视图的其余触摸被取消。

我已经添加了一个轻扫手势,我的看法,它正在工作。 通过一些日志logging,当我做一个单一的滑动,方法报告。 然而,我的touchesBegan方法也是通过它的日志报告,尽pipetouchesCancelled方法,正如所料,也收到一条消息。

我想,并期望,手势识别,以防止touchesBegantouchesMoved被调用。

所以我的问题是:对于手势识别器实际上是延迟触摸基于其状态,是否有额外的设置必要? 文件没有提出任何其他必要的。

我的设置很简单:

  swipeUpTwoFinger=[[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(doubleSwipeUp:)]autorelease]; swipeUpTwoFinger.direction=UISwipeGestureRecognizerDirectionUp; swipeUpTwoFinger.numberOfTouchesRequired=2; [self addGestureRecognizer:swipeUpTwoFinger]; 

我也尝试过这个testing,以确保识别器在用touchesBegan处理之前失败(如果您相信文档上述内容,则不需要此testing),但touchesBegan在此testing之后仍在处理日志行:

if (swipeUpTwoFinger.state==UIGestureRecognizerStateFailed)

这听起来像你需要: swipeUpTwoFinger.delaysTouchesBegan = YES;