7

众所周知,zPosition层数只决定了哪一层覆盖哪一层。无论是zPosition10 还是 1000 都不会影响其位置。

也就是说,除非我们使用CATransformLayer包含那些图层,否则zPosition这些图层的 将影响图层的位置。

但是,在 iOS 5.1.1 中运行的以下代码确实会zPosition改变图层的位置...您可以在新的 Single View App 中尝试,并将以下代码添加到ViewController.m. 如果 的zPositionlayer2变为88188我们可以看到图层相应地移动。所以CATransformLayer代码中没有;为什么会这样?(请引用 Apple 文档或任何参考资料)。

同样相关的是,如果将线self.view.layer.sublayerTransform = transform3D;更改为,self.view.layer.transform = transform3D;zPosition将不会影响位置。但根据 Apple 文档,transformsublayerTransform在 self 是否被转换方面有所不同

两个层属性指定变换矩阵:transformsublayerTransform。由 指定的矩阵transform property应用于层及其相对于层的子层 anchorPoint。[...]该 sublayerTransform属性指定的矩阵仅应用于图层的子图层,而不是图层本身。

所以奇怪的是,为什么改变它会导致表现self.view.layer得像CATransformLayer.

-(void) viewDidAppear:(BOOL)animated {

    CATransform3D transform3D = CATransform3DIdentity;

    transform3D.m34 = -1.0 / 1000;

    transform3D = CATransform3DRotate(transform3D, M_PI / 4, 0, 1, 0);

    self.view.layer.sublayerTransform = transform3D;

    CALayer *layer1 = [[CALayer alloc] init];
    layer1.zPosition = 33;
    layer1.frame = CGRectMake(100, 100, 100, 100);
    layer1.backgroundColor = [[UIColor orangeColor] CGColor];

    [self.view.layer addSublayer:layer1];

    CALayer *layer2 = [[CALayer alloc] init];
    layer2.zPosition = 88;
    layer2.frame = CGRectMake(100, 120, 100, 100);
    layer2.backgroundColor = [[UIColor yellowColor] CGColor];

    [self.view.layer addSublayer:layer2];    

}
4

1 回答 1

0

我们可以把图层想象成一个坐标图层,当我们将图层transfrom3D时,它的坐标变成3D,但是它的subLayer仍然显示为2D,但是当设置sublayer transfrom3D时,图层会使其所有子图层显示为3D。和旋转一样

于 2012-12-05T15:10:28.543 回答