我有一个复杂的视图层次结构。我遇到的问题是我有几个兄弟视图,这些视图可以在屏幕上移动。每当移动一个视图时,我的代码都会进行一些子视图重新排序,以便它在所有其他兄弟节点之上可视化。
我的问题是,当视图在视觉上位于另一个视图之上时,其下方的视图是实际接收触摸的视图。有人知道会导致这样的行为吗?也许某人遇到了类似的问题。
提前致谢,
答案 0 :(得分:1)
我的理解是,这些视图的超级视图的hitTest
只是遍历其subviews
数组并选择第一个以非nil
响应的数组。首先绘制subviews
列表中先前排序的视图,这意味着它们将在视觉上位于其他视图下方。
答案 1 :(得分:1)
好的,我刚刚发现问题,所以我会回答我自己的问题,万一其他人偶然发现了这个问题。
这里的问题结果是我的超级视图,这些兄弟姐妹坐在里面。这个超级视图覆盖了hitTest:方法并以正向顺序循环其子视图。 Apple明确指出hitTest:方法应该以相反的顺序遍历其子视图。因此,更新循环以反向顺序修复问题。
以相反顺序进行的原因很简单。每次添加子视图时,它都会添加到子视图数组的末尾,并可视地放在所有其他子视图的顶部。因此,屏幕上最前面的视图是子视图数组中的最后一个视图,这就是您需要按相反顺序进行操作的原因。
希望这有助于其他任何偶然发现此行为的人。
答案 2 :(得分:0)
如果更改视图层的zPosition,则可能会发生这种情况。