已知的是,在zPosition
的层的唯一确定哪个层掩盖该层。 无论是zPosition
的10或1000不会影响其位置。
也就是说,除非如果我们使用CATransformLayer
包含这些层 ,然后将zPosition
的层会影响层位置。
然而,在IOS 5.1.1运行下面的代码确实让zPosition
改变层的位置......你可以尝试在一个新的单一视图应用程序,和下面的代码添加到ViewController.m
。 如果zPosition
的layer2
从改变88
至188
,可以看出,该层相应地移动。 因此,没有CATransformLayer
是在代码; 为什么会是那样做的? (请注明苹果文档或任何参考)。
还相关的是,如果线路self.view.layer.sublayerTransform = transform3D;
被改变为self.view.layer.transform = transform3D;
那么zPosition
将有上的位置没有影响。 但根据苹果的文档, transform
和sublayerTransform
只有在自我是否转化或者没有不同 :
两个层属性指定变换矩阵:
transform
和sublayerTransform
。 由指定的矩阵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];
}