与 UIGestureRecognizer 一起监听 UITouch 事件
Posted
技术标签:
【中文标题】与 UIGestureRecognizer 一起监听 UITouch 事件【英文标题】:Listening to UITouch event along with UIGestureRecognizer 【发布时间】:2012-03-20 00:49:28 【问题描述】:我正在创建一个自定义 UIView 并在其上添加一个 UITapGestureRecognizer。我有一个用于点击手势的处理程序。但同时我希望我的 UIView 能够监听 touchesBegan 和 touchesEnded 方法。我也实现了 gestureRecognizer:shouldReceiveTouch: 方法,但 touchesBegan/touchesEnded 方法没有被调用。有什么线索吗?
在我的自定义 UIView 中
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)iGestureRecognizer shouldReceiveTouch:(UITouch *)iTouch
return YES;
在我的视图控制器中
MyCustomView aCustomView = [[[MyCustomView alloc] init] autorelease];
UIGestureRecognizer *myGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
[aCustomView addGestureRecognizer:myGestureRecognizer];
[myGestureRecognizer release];
【问题讨论】:
我一直以为touchesBegan只适用于主viewController的view。 【参考方案1】:您需要将手势识别器的cancelsTouchesInView
(可能还有delaysTouchesBegan
和delaysTouchesEnded
)设置为NO
。手势识别器的默认行为是避免让它和视图同时处理触摸。这些设置可让您微调该行为。
【讨论】:
我当然希望我得到你提到的那种行为。我正在使用默认设置,但我的触摸方法仍然被调用。在这里查看我的问题:***.com/questions/15869944/… @RobNapier 将无法在此处将 cancelsTouchesInView 与我的问题相关联:***.com/questions/46170876/…【参考方案2】:如前所述,您需要将UITapGestureRecognizer
上的cancelTouchesInView
属性设置为NO
。
来自 Apple 文档:
cancelsTouchesInView——如果手势识别器识别出它的手势, 它会从他们的视野中解除该手势的剩余触摸(所以 窗口不会提供它们)。窗口取消之前的 使用 (touchesCancelled:withEvent:) 消息传递触摸。如果一个 手势识别器无法识别其手势,视图接收到 多点触摸序列中的所有触摸。
进一步阅读: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIGestureRecognizer_Class/
【讨论】:
以上是关于与 UIGestureRecognizer 一起监听 UITouch 事件的主要内容,如果未能解决你的问题,请参考以下文章
自动化运维设计难点:如何将“监”“管”“控”有效的结合在一起?
从 UITouch 对象调用 UIGestureRecognizer
UIGestureRecognizer 如何识别被点击的圆圈?