有没有办法为UIImageView对象的z位置设置某种z-index?

时间:2009-05-05 17:35:30

标签: iphone cocoa-touch uikit uiview

我正在建立一个图像网格,我从顶部开始,在整个地方创建UIImageView对象。现在我希望它们重叠一点,但我绘制的最后一些是最重要的。我想以编程方式设置z位置,以便我绘制的第一个将是最顶层的。

9 个答案:

答案 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;