为什么兄弟视图在其他兄弟视图后面可视化,首先接收触摸事件?

时间:2015-01-23 18:15:59

标签: ios uiview siblings uiview-hierarchy

我有一个复杂的视图层次结构。我遇到的问题是我有几个兄弟视图,这些视图可以在屏幕上移动。每当移动一个视图时,我的代码都会进行一些子视图重新排序,以便它在所有其他兄弟节点之上可视化。

我的问题是,当视图在视觉上位于另一个视图之上时,其下方的视图是实际接收触摸的视图。有人知道会导致这样的行为吗?也许某人遇到了类似的问题。

提前致谢,

3 个答案:

答案 0 :(得分:1)

我的理解是,这些视图的超级视图的hitTest只是遍历其subviews数组并选择第一个以非nil响应的数组。首先绘制subviews列表中先前排序的视图,这意味着它们将在视觉上位于其他视图下方。

答案 1 :(得分:1)

好的,我刚刚发现问题,所以我会回答我自己的问题,万一其他人偶然发现了这个问题。

这里的问题结果是我的超级视图,这些兄弟姐妹坐在里面。这个超级视图覆盖了hitTest:方法并以正向顺序循环其子视图。 Apple明确指出hitTest:方法应该以相反的顺序遍历其子视图。因此,更新循环以反向顺序修复问题。

以相反顺序进行的原因很简单。每次添加子视图时,它都会添加到子视图数组的末尾,并可视地放在所有其他子视图的顶部。因此,屏幕上最前面的视图是子视图数组中的最后一个视图,这就是您需要按相反顺序进行操作的原因。

希望这有助于其他任何偶然发现此行为的人。

答案 2 :(得分:0)

如果更改视图层的zPosition,则可能会发生这种情况。