我想将一个视图移到另一个视图之上,我怎么知道视图的z索引,以及如何移动到顶部?
UIView
兄弟姐妹按照他们被添加到他们的超级视图的顺序堆叠。 UIView
层次结构方法和属性用于管理视图顺序。在UIView.h中:
@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;
兄弟视图在subviews
数组中排在前面。所以最顶层的视图将是:
[parentView.subviews lastObject];
和底部视图将是:
[parentView.subviews objectAtIndex:0];
就像Kolin Krewinkel所说的那样,[parentView bringSubviewToFront:view]
会把视图带到顶端,但只有在视图是层次结构中的所有兄弟姐妹时才会出现这种情况。
您可以使用视图图层的zPosition
属性(它是CALayer
对象)来更改视图的z-index。
theView.layer.zPosition = 1;
正如Viktor Nordling所补充的那样,“大值是最重要的。你可以使用你想要的任何值,包括负值。”默认值为0。
您需要导入QuartzCore框架才能访问该层。只需在实现文件的顶部添加此行代码即可。
#import "QuartzCore/QuartzCore.h"
IB和斯威夫特
鉴于流动的布局,黄色是超视图,红色,绿色和蓝色是兄弟的黄色子视图,
目标是将子视图(让我们说绿色)移到顶部。
在Interface Builder中,您需要做的就是将您想要显示的视图拖到文档大纲中列表的底部。
或者,您可以选择视图,然后在菜单中转到编辑器>排列>发送到前面。
有几种不同的方法可以以编程方式执行此操作。
方法1
yellowView.bringSubviewToFront(greenView)
yellowView.subviews
中。在这里,bringSubviewToFront
将greenView
从指数0
移动到2
。这可以用来观察
print(yellowView.subviews.indexOf(greenView))
方法2
greenView.layer.zPosition = 1
0
,因此结果是greenView
看起来像在顶部。但是,它仍然保持在0
阵列的指数yellowView.subviews
。但是,这可能会导致一些意想不到的结果,因为点击事件之类的内容仍将首先进入索引编号最高的视图。出于这个原因,最好采用上面的方法1。zPosition
可以设置为CGFloat.greatestFiniteMagnitude
(旧版Swift中的CGFloat(FLT_MAX)
)以确保它位于顶部。[parentView bringSubviewToFront:view] ;
如果要通过XCode的Interface Builder执行此操作,可以使用Editor-> Arrangement下的菜单选项。在那里你会找到“发送到前面”,“发送到后面”等。
在视图中你想要带到顶部......(在swift中)
superview?.bringSubviewToFront(self)
如果你使用cocos2d,你可能会看到[parentView bringSubviewToFront:view]的问题,至少它不适合我。我没有将我想要的视图带到前面,而是将其他视图发回去,这就是诀窍。
[[[CCDirector sharedDirector] view] sendSubviewToBack:((UIButton *) button)];
我们可以在ios中使用zPosition
如果我们有一个名为salonDetailView的视图,例如:@IBOutlet weak var salonDetailView: UIView!
并为GMSMapView设置UIView,例如:@IBOutlet weak var mapViewUI: GMSMapView!
显示mapView UI的View沙龙DetailView上方
使用zPosition如下
salonDetailView.layer.zPosition = 1