【发布时间】:2014-01-10 20:05:26
【问题描述】:
我有以下问题:我想要常量,在parentView.subviews 数组中定义子视图的顺序。这个常量不必是子视图数组的索引,但它们可以。
类似这样的:
#define VIEW1_INDEX 10 // or 0, if it's an index
#define VIEW2_INDEX 20 // or 1, if it's an index
这意味着parentView.subviews 数组是{view1, view2}。
首先我尝试使用 CALayer 的 zPosition 属性。
假设我有 parentView 的两个子视图:view1 和 view2,它们具有相同的大小和框架。 parentView.subviews 数组是 {view1, view2}(按此顺序)。
如果我这样做了
view2.layer.zPosition = VIEW2_INDEX;
view1.layer.zPosition = VIEW1_INDEX;
比subviews的显示顺序改变了,但是tap处理顺序和parentView.subviews数组保持不变,所以我在顶部看到view1,点击它,但是这个tap是由view2处理的,不是我的期望。
所以我需要同时更改显示顺序和事件处理顺序。
我最好的想法是使用代码,它始终与代码一起设置新的 zPosition,从而更改子视图数组:
view2.layer.zPosition = 0;
NSUInteger* index = [parentView.subviews indexOfObject:view2];
[parentView exchangeSubviewAtIndex:0 withSubviewAtIndex:index];
但这似乎不是最好的解决方案。
其他想法是使用[parentView insertSubview:atIndex:] 而不是[parentView addSubview],但是我需要确保我以正确的顺序插入视图,这有点令人厌烦,因为我在其中创建了大约 15 个视图不同的地方。
所以最后的问题是:有没有办法解决问题,如开头所述?
【问题讨论】:
标签: ios iphone objective-c uiview calayer