ios - zPosition 和 subview 数组

标签 ios iphone objective-c uiview calayer

我有以下问题:我想要常量,在 parentView.subviews 数组中定义 subview 的顺序。此常量不一定是 subview 数组的索引,但它们可以。

像这样:

#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 的 subview :view1view2,它们具有相同的大小和框架。 parentView.subviews 数组是 {view1, view2}(按此顺序)。 如果我这样做

view2.layer.zPosition = VIEW2_INDEX;
view1.layer.zPosition = VIEW1_INDEX;

subview 的显示顺序改变了,但是点击处理顺序和 parentView.subviews 数组保持不变,所以我在顶部看到 view1,点击它,但是此点击由 view2 处理,这不是我所期望的。

所以我需要同时更改显示顺序和事件处理顺序。

我最好的想法是使用代码,它总是与更改 subview 数组的代码一起设置新的 zPosition:

view2.layer.zPosition = 0;
NSUInteger* index = [parentView.subviews indexOfObject:view2];
[parentView exchangeSubviewAtIndex:0 withSubviewAtIndex:index];

但这似乎不是最好的解决方案。


其他想法是使用 [parentView insertSubview:atIndex:] 而不是 [parentView addSubview],但我需要确保插入 View 按照正确的顺序,这有点烦人,因为我在不同的地方创建了大约 15 个 View 。


所以最后的问题是:有没有办法解决开头描述的问题?

最佳答案

如何根据所需的堆叠顺序分配 subview 的标签 1..15(如果有 15 个)。将它们全部放在一个数组中,然后按标签排序。迭代数组,将它们添加到父 View 。

我不确定它们是如何创建的,但假设它们以任意顺序包含在某个数组中:

NSMutableArray *views = [NSMutableArray array];

UIView *subview9 = [[UIView alloc] init];
subview9.tag = 9;
[views addObject:subview9];

// and so on, in arbitrary order for subview1, subview2, subview3
// remember tag == 0 is no good, because it will be undistinguishable in viewWithTag
// from unassigned tags

排序数组:

[views sortUsingComparator:^(UIView *vA, UIView *vB) {
    return vA.tag - vB.tag;
}];

将它们添加到父 View ,现在已排序:

for (UIView *view in views) {
    [theViewThatContainsThemInTagOrder addSubview:view];
}

关于ios - zPosition 和 subview 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21053465/

相关文章:

ios - 在 Controller2 swift 中的方法之后更新 Controller1 中的 tableView

ios - NotificationCenter 在 Swift 中传递数据

ios - iPhone在状态栏顶部添加黑色空间

ios - 可以使用 NSUserDefaults 而不是数据库吗?

objective-c - 为什么我们不能在当前队列上使用 dispatch_sync?

ios - 在 iOS 应用程序的 google drive api 集成和权限中出现错误

objective-c - 是否可以更改 NSTextView 的标题高度?

ios - 如何获取 UIStackView 内的 UIView 的宽度值

ios - iPhone调用相机时随机死机?

iphone - 设置了animationDidStop但没有被调用(iPhone应用程序编码)