zPosition
レイヤーのは、どのレイヤーがどのレイヤーを覆うかを決定するだけであることが知られています。それがzPosition
10 であろうと 1000 であろうと、その位置には影響しません。
つまり、これらのレイヤーを含めるために使用しない限り、これらのレイヤーCATransformLayer
zPosition
の はレイヤーの位置に影響します。
ただし、iOS 5.1.1 で実行されている次のコードzPosition
では、レイヤーの位置が変更されます。新しいシングル ビュー アプリで試して、次のコードをViewController.m
. のzPosition
をからにlayer2
変更すると、それに応じてレイヤーが移動することがわかります。したがって、コードにはありません。なぜそのように振る舞うのでしょうか?(Appleのドキュメントまたは参考文献を引用してください)。88
188
CATransformLayer
また、関連するのは、行self.view.layer.sublayerTransform = transform3D;
が変更されたself.view.layer.transform = transform3D;
場合zPosition
、位置に影響を与えないことです。しかし、Apple docs によると、transform
selfsublayerTransform
が変換されるかどうかだけが異なります:
transform
および の 2 つのレイヤー プロパティが変換行列を指定します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];
}