我正在建立一个图像网格,我从顶部开始,在整个地方创建UIImageView对象。现在我希望它们重叠一点,但我绘制的最后一些是最重要的。我想以编程方式设置z位置,以便我绘制的第一个将是最顶层的。
答案 0 :(得分:20)
而不是使用 insertSubiew ,您可以尝试:
- (void)bringSubviewToFront:(UIView *)view
- (void)sendSubviewToBack:(UIView *)view
答案 1 :(得分:14)
你说你用过UIImageView。使用UIImageView绘制图像意味着初始化它,然后将其添加到容器视图中。
你不能在循环中使用这段代码吗?
[containerView insertSubview:image atIndex:[[containerView subviews] count]]
结果是首先添加的视图位于视图堆栈的顶部(尽管我还没有测试过这个:))
答案 2 :(得分:6)
https://stackoverflow.com/a/4631895/2482283
您可以使用视图图层的zPosition属性(它是CALayer对象)来更改视图的z-index。
theView.layer.zPosition = 1;
正如维克多·诺德林所说,“重要的是价值观。你可以使用你想要的任何价值,包括负值。”默认值为0.
您需要导入QuartzCore框架才能访问该图层。只需在实现文件的顶部添加此行代码即可。
#import "QuartzCore/QuartzCore.h"
另一种方式(https://stackoverflow.com/a/4663526/2482283),您还可以使用uiviews方法:
@property(nonatomic,readonly) UIView *superview;
@property(nonatomic,readonly,copy) NSArray *subviews;
- (void)removeFromSuperview;
- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index;
- (void)exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:(NSInteger)index2;
- (void)addSubview:(UIView *)view;
- (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview;
- (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview;
- (void)bringSubviewToFront:(UIView *)view;
- (void)sendSubviewToBack:(UIView *)view;
答案 3 :(得分:3)
不直接。
一个解决方案是给UIViews一个z-index属性;定义深度级别的整数。然后你可以通过一个包含UIViews的NSArray(myArray)进行迭代,将它们按照深度顺序添加为子视图。
答案 4 :(得分:3)
我遇到了同样的问题。我需要具有最高和最低z-index的子视图元素。从我的测试中我发现,UIKit根据他们的z位置在subviews-property中排列元素。如果你采取
[self.scrollview subviews]
例如。第一个数组元素是最后面的子视图。索引最高的数组元素是最前面的子视图。如果你使用
- (void)bringSubviewToFront:(UIView *)view
- (void)sendSubviewToBack:(UIView *)view`
子视图数组将相应地重新排序。
答案 5 :(得分:3)
如果你有参考下面/上面的视图,你需要添加子视图,你可以使用以下
[self.view insertSubview:<#(UIView *)#> belowSubview:<#(UIView *)#>];
[self.view insertSubview:<#(UIView *)#> aboveSubview:<#(UIView *)#>];
答案 6 :(得分:2)
实际上,据我所知,没有z-index位置属性。在视图中绘图使用简单的绘图模型。
你可以将你的逻辑放在绘图循环中(即最后绘制你想要的东西)或者你可以使用Cocoa Animation,因为与UIImageView不同,CALayers确实有深度(它们是3D空间的2D投影) 。请参阅here以获取参考。
答案 7 :(得分:1)
你真的可能想考虑使用CALayer而不是大量的UIImageView对象。 UIImageView对象很棒但是对于强烈的绘图,CALayer的重量更轻,效率更高(尽管如果你需要用户与图像交互,视图对象更好)。这真的取决于你在做什么。 CALayers确实有zPosition属性。这是UIKit在视图堆栈中排列UIView的位置时使用的。
答案 8 :(得分:1)
imageView.layer.zPosition = 100;