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

时间:2013-04-08 01:33:37

标签: iphone ios objective-c uiview uigesturerecognizer

通过阅读UIGestureRecognizer Class Reference,暗示API将为您处理触摸和手势控制的优先级,确保除非手势,否则不会在视图上调用touchesBegan及相关方法识别者首先失败了:

  

窗口将触摸事件传递给手势识别器,然后将其传递到连接到手势识别器的经过测试的视图。通常,如果手势识别器分析多触摸序列中的触摸流并且不识别其手势,则视图接收全部触摸。 如果手势识别器识别出其手势,则视图的剩余触摸将被取消。

我在我的视图中添加了一个滑动手势,它正在运行。通过一些日志记录,当我进行单次滑动时,该方法会报告。但是,我的touchesBegan方法通过其日志进行报告,尽管touchesCancelled方法正如预期的那样也会收到消息。

我希望并且期望手势可以识别,以防止调用touchesBegantouchesMoved

所以我的问题是:对于手势识别器实际上根据其状态延迟触摸,是否需要额外的设置?文档不会在必要时提出任何其他建议。

我的设置很简单:

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

我还尝试过这个测试,以确保识别器在使用touchesBegan进行处理之前已经失败(如果你相信上面的文档所说的话,这个测试应该)但是{在此测试后,{1}}仍在处理日志行:

touchesBegan

1 个答案:

答案 0 :(得分:8)

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