iOS--同级Layer改变显示顺序 ( calayer zPosition ) 与坐标系转换
1. Layer在将Point,Rect改变参考系的方法
图层的point,Rect可以以不同参考系进行坐标转换
图层在图层树当中 也是相对于福涂层按层级关系放置的,一个图层的Position依赖于它父视图的bounds, 如果父图层发生了移动,它的所有子图层也会跟着移动。
移动根图层会将它的子图层作为一个整体来移动,但是有时候也需要图层的绝对位置,或者相对于非父图层的位置;
CALayer给不同坐标系之间的图层转换 提供工具类方法
1.- (CGPoint)convertPoint:(CGPoint)point fromLayer:(CALayer *)layer; 从Layer的坐标转为self的
2.- (CGPoint)convertPoint:(CGPoint)point toLayer:(CALayer *)layer; 从self的转为Layer的
3.- (CGRect)convertRect:(CGRect)rect fromLayer:(CALayer *)layer;
4.- (CGRect)convertRect:(CGRect)rect toLayer:(CALayer *)layer;
2. zPosition 是改变图层的显示顺序
CALayer * layer1 = [[CALayer alloc] init];
layer1.frame = CGRectMake(0, 0, 150, 150);
layer1.backgroundColor = [UIColor redColor].CGColor;
CALayer * layer2 = [[CALayer alloc] init];
layer2.frame = CGRectMake(50, 50, 150, 150);
layer2.backgroundColor = [UIColor blueColor].CGColor;
layer1.zPosition = 1; //正数 向 相机位置靠近
self.view.layer.zPosition = 0.5;
layer2.zPosition = 2;
[self.testview.layer addSublayer:layer1];
[self.testview.layer addSublayer:layer2];
//1. zPosition的位置默认为 0.0
//2. 父子layer无法通过zPosition调整位置,父Layer永远先画出来,且在子Layer的下面
//3. 兄弟Layer可以通过zPosition来调整显示顺序, 整数表示靠近相机,显示在上面
//默认zPosition都是0
NSLog(@"%f, %f, %f", layer1.zPosition, layer2.zPosition, self.testview.layer.zPosition);
Z坐标轴 zPosition 和 anchorPointZ
UIView的坐标轴是二维坐标系, CALayer存在一个三维空间中。Layer将通过zPosition和anchorPoint两个浮点数在z轴上描述图层位置。
1. Layer虽然处于三维中,但是Layer是一个完全扁平的对象;
2. zPosition最实用的功能是改变图层的显示顺序.
图层是根据他们子图层的subLayers出现的顺序来绘制的(依次绘制)。所以先添加的Layer会被画在最下面,被后面添加的Layer覆盖。但是zPosition可以调整图层向着“相机”方向前置,于是zPosition可以调整显示位置;