我目前正在使用...
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
来检测滑动。我已经一切正常了。唯一的问题是,如果用户触摸某个东西(例如 UIButton 或其他东西)的顶部- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
不被调用。是否有类似 TouchBegan 的东西,但如果我触摸视图上的任何地方,它就会起作用?
提前致谢,
大卫
触摸事件的传播方式如下:
- UIViews 被发送-hitTest:withEvent:递归直到某个 UIView 确定触摸位于其边界内,而不是位于任何启用用户交互的子视图内。
- UIWindow发送-touchesBegan:withEvent:以及步骤 1 中返回的 UIView 的朋友,忽略任何视图层次结构。
换句话说,-hitTest:withEvent:用于确定触摸的目标视图,之后目标视图获取所有-触摸...:withEvent:消息。如果您需要拦截可能从 UIButton 开始的滑动手势,则必须覆盖-hitTest:withEvent:回来self.
但这种方法有一个问题。一旦你这样做了,你的按钮将停止工作,因为它不会得到任何-触摸...:withEvent:消息。除非检测到滑动手势,否则您必须手动将触摸转发到子视图。这是一个严重的痛苦,而且根本不能保证有效。这就是 UIGestureRecognizers 的用途。
另一种方法是子类化 UIWindow 并覆盖-发送事件:,这可能更适合您的情况。
无论如何,请务必阅读事件处理 http://developer.apple.com/library/ios/#documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/彻底记录。除其他可怕的警告外,它还说:
UIKit框架的类是
并非设计用于接收触摸
不受其约束;以程序化方式
术语,这意味着视图
UITouch 对象的属性必须
保留对框架的引用
物体以便触摸
处理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)