繁体   English   中英

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

[英]How to prioritize gesture recognizers and touches in a UIView

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

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

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

我希望并且期望手势能够识别以防止被touchesBegantouchesMoved

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

我的设置很简单:

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

我也尝试过这种测试,以确保识别器未能与处理前touchesBegan (如果你相信什么文档上面说这个测试应该没有必要),但touchesBegan仍在处理此试验后,在日志行:

if (swipeUpTwoFinger.state==UIGestureRecognizerStateFailed)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM