1

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

我的问题是,当一个视图在视觉上位于另一个视图之上时,它下面的视图实际上首先接收到触摸。有谁知道什么会导致这样的行为?也许有人遇到过类似的问题。

提前致谢,

4

3 回答 3

1

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

于 2015-01-23T18:57:28.390 回答
1

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

这里的问题原来出在我的一个超级视图中,这些兄弟姐妹就坐在其中。这个超级视图覆盖了 hitTest: 方法并以正向循环遍历它的子视图。Apple 明确声明 hitTest: 方法应该以相反的顺序循环遍历其子视图。所以更新循环以相反的顺序解决了这个问题。

逆序的原因很简单。每次添加子视图时,都会将其添加到子视图数组的末尾,并在视觉上放置在所有其他子视图的顶部。所以屏幕上最前面的视图是子视图数组中的最后一个视图,这就是为什么你需要以相反的顺序进行。

希望这可以帮助任何偶然发现这种行为的人。

于 2015-01-23T23:45:16.763 回答
0

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

于 2018-08-02T19:52:26.103 回答