gpt4 book ai didi

iphone - 如何在 UIView 的深层层次结构中检测 UIImageView 上的触摸事件?

转载 作者:搜寻专家 更新时间:2023-10-30 20:07:59 25 4
gpt4 key购买 nike

我正在 iPhone 上开发一个简单的游戏,我从一个基于 View 的应用程序开始,通过 UIViewController 我正在加载一个包含更多 的自定义 UIView >UIView 和一些 UIImageView。我想检测某些 UIImageView 上的触摸事件,但到目前为止我做不到。

我创建了第二个项目用于测试目的,并认为 UIImageView 在层次结构如下时处理触摸事件:

UIViewController -> UIView -> UIImageView,

但是当它像:

UIViewController -> UIView -> UIView -> UIImageView

他们没有被发现。

注意事项:
- userInteractionEnabled 在所有情况下都是YES
- 我上面提到的所有 UIViewsUIImageViews 都是自定义子类。

当自定义 UIImageView 在 View 层次结构中变得更深时,您能想到为什么无法接收触摸事件的任何原因吗?

最佳答案

触摸需要经过漫长而迂回的路线才能到达目的地。正式地,它们沿着响应者链上升,从第一个响应者开始,然后从最深的包含触摸的 View 到它的 View Controller ,再到下一个包含触摸的 View ,等等。

但实际情况要复杂得多,因为在找到最深的包含触摸的 View 时,触摸本质上是通过调用 hitTest:withEvent 来“询问”该信息的最高级别 View : 方法。这允许某些 super View 劫持触摸,这可能非常有用,例如 UIScrollView,它有时会在其 subview 知道发生了什么之前执行操作(滚动/缩放)。

这里有一些提示可以帮助确定 View 可能不响应触摸的原因:

  • 覆盖 [hitTest:withEvent:] 1在您的每个 View 和 NSLog 被击中时查看响应者链正在考虑谁。
  • 使用未记录的(因此在提交之前取出)UIView 方法 recursiveDescription在运行时检查所有 View 的框架。默认情况下, View 显示超出其框架大小,因此它们可能看起来不错,但逻辑上的尺寸小于视觉上的尺寸——并且触摸响应基于逻辑(而非视觉)尺寸。
  • 这听起来可能很愚蠢,但请仔细检查您的方法是否正确连接到您正在寻找的输出。例如,如果您希望在触摸 UIButton 时调用您的 - [MyClass buttonPressed] 方法,请仔细检查您是否添加了 MyClass 实例并@selector(buttonPressed) 作为该按钮的目标/操作对。
  • 如果这些都不起作用,请使用 NSLog 消息覆盖 touchesBegan:withEvent: 以查看触摸在响应链上的哪个位置。

而且,您已经知道这一点,但要注意 userInteractionEnabled 标志!

希望这足以隔离问题。

关于iphone - 如何在 UIView 的深层层次结构中检测 UIImageView 上的触摸事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2546375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com