nop*_*ole 7 core-animation calayer catransform3d ios catransformlayer
众所周知,zPosition层中的层仅确定哪个层覆盖哪个层.无论是zPosition10还是1000,都不会影响其地位.
也就是说,除非我们使用CATransformLayer包含这些图层,否则zPosition这些图层将影响图层的位置.
但是,在iOS 5.1.1中运行的以下代码确实可以zPosition改变图层的位置...您可以在新的单视图应用程序中尝试它,并添加以下代码ViewController.m.如果zPositionof layer2更改为88to 188,我们可以看到图层相应地移动.所以CATransformLayer代码中没有; 它为什么会这样?(请引用Apple文档或任何参考).
另外相关的是,如果线self.view.layer.sublayerTransform = transform3D;被改变为self.view.layer.transform = transform3D; 那么zPosition将对位置没有影响.但根据苹果的文档,transform并且sublayerTransform只有在自我是否转化或者没有不同:
两层属性指定转换矩阵:
transform和sublayerTransform.由the指定的矩阵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];
}
Run Code Online (Sandbox Code Playgroud)
我们可以把图层看成是一个坐标图层,当我们把一个图层设置为transfrom3D时,它的坐标变成了3D,但是它的子图层仍然显示为2D,但是当设置子图层transfrom3D时,该图层会让它的所有子图层显示为3D。与旋转相同
| 归档时间: |
|
| 查看次数: |
3365 次 |
| 最近记录: |