[英]How can I detect touch events on a UIImageView inside a deep hierarchy of UIViews?
我正在iPhone上开发一个简单的游戏,我开始使用基于View的应用程序,通过UIViewController
我正在加载一个包含更多UIView
和一些UIImageView
的自定义UIView
。 我想检测一些UIImageView
上的触摸事件,但到目前为止我还没能。
我已经创建了第二个用于测试目的的项目,并且认为UIImageView
在层次结构如下时处理触摸事件:
UIViewController
- >UIView
- >UIImageView
,
但是当它像:
UIViewController
- >UIView
- >UIView
- >UIImageView
他们没有被发现。
笔记:
- userInteractionEnabled
在所有情况下都为YES
- 我上面提到的所有UIViews
和UIImageViews
都是自定义子类。
您能想到任何原因,当自定义UIImageView
在视图层次结构中变深时无法接收触摸事件吗?
接触需要一条漫长而迂回的路线才能到达目的地。 正式地,他们沿响应链上行,从第一响应者开始,然后从最深触摸视图到视图控制器,到下一个触摸 - 包括视图等。
但实际情况更加复杂,因为在找到最深入的触摸视图时,触摸实际上是通过调用hitTest:withEvent:
方法“询问”该信息的最高级别视图。 这允许一些超级视图劫持触摸,这可能非常有用,如UIScrollView
,它有时会在其子视图知道发生了什么之前做事情(滚动/缩放)。
以下是一些提示,可帮助确定视图可能无法响应触摸的原因:
NSLog
上覆盖[hitTest:withEvent:
] 1 ,当它们被击中时,看看谁正在考虑响应者链。 UIView
方法recursiveDescription
来检查运行时所有视图的帧。 默认情况下,视图显示超出其帧大小,因此它们可能看起来没问题,但逻辑上比视觉上更小 - 并且触摸响应基于逻辑(非可视)大小。 UIButton
时调用 - [MyClass buttonPressed]方法,请仔细检查您是否已将MyClass
实例和@selector(buttonPressed)
添加为该按钮的目标/操作对。 touchesBegan:withEvent:
with NSLog
消息,以查看响应链上的触摸位置。 并且,您已经知道这一点,但请注意userInteractionEnabled
标志!
希望这足以隔离问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.