3 回答
TA贡献1804条经验 获得超8个赞
这似乎是一个基本的问题。但是,我同意您的要求,该文档不像其他文档那么清晰,所以这是我的答案。
hitTest:withEvent:UIResponder中的实现执行以下操作:
它调用pointInside:withEvent:的self
如果返回为NO,则hitTest:withEvent:返回nil。故事的结尾。
如果返回值为“是”,则它将hitTest:withEvent:消息发送到其子视图。它从顶层子视图开始,然后继续其他视图,直到子视图返回非nil对象,或者所有子视图都收到消息。
如果子视图nil第一次返回非对象,则第一个hitTest:withEvent:返回该对象。故事的结尾。
如果没有子视图返回非nil对象,则第一个hitTest:withEvent:返回self
此过程以递归方式重复,因此通常最终返回视图层次结构的叶视图。
但是,您可能会覆盖hitTest:withEvent以执行其他操作。在许多情况下,覆盖pointInside:withEvent:更为简单,并且仍然提供足够的选项来调整应用程序中的事件处理。
TA贡献2011条经验 获得超2个赞
我认为您在将子类与视图层次结构混淆。该文档说的如下。假设您具有此视图层次结构。通过层次结构,我不是在谈论类层次结构,而是在视图层次结构中的视图,如下所示:
+----------------------------+
|A |
|+--------+ +------------+ |
||B | |C | |
|| | |+----------+| |
|+--------+ ||D || |
| |+----------+| |
| +------------+ |
+----------------------------+
假设您将手指放在里面D。将会发生以下情况:
hitTest:withEvent:A在视图层次结构的最顶层视图上调用。
pointInside:withEvent: 在每个视图上递归调用。
pointInside:withEvent:被调用A,并返回YES
pointInside:withEvent:被调用B,并返回NO
pointInside:withEvent:被调用C,并返回YES
pointInside:withEvent:被调用D,并返回YES
在返回的视图上YES,它将向下查看层次结构以查看发生触摸的子视图。在这种情况下,从A,C并且D,这将是D。
D 将成为热门测试视图
- 3 回答
- 0 关注
- 725 浏览
添加回答
举报