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可以调整显示位置;

  

posted on 2020-04-15 16:42  码上翻身  阅读(1024)  评论(0编辑  收藏  举报

导航