Se sabe que zPosition
de las capas solo determina qué capa cubre la capa. Si es un zPosition
de 10 o 1000 no afectará su posición.En iOS, ¿por qué la configuración de la capa sublayerTransform se convierte en sí misma para actuar como CATranformLayer?
Es decir, a menos que tengamos use CATransformLayer
to contain those layers, entonces el zPosition
de esas capas afectará la posición de las capas.
Sin embargo, el siguiente código que se ejecuta en iOS 5.1.1 hace que el zPosition
modifique la posición de las capas ... puede probarlo en una nueva aplicación de vista única y agregar el siguiente código a ViewController.m
. Si el zPosition
de layer2
se cambia de 88
a 188
, podemos ver que la capa se mueve en consecuencia. Entonces, no hay CATransformLayer
en el código; ¿Por qué se comportará así? (Por favor, cita los documentos de Apple o cualquier referencia).
También se relaciona, si la línea self.view.layer.sublayerTransform = transform3D;
se cambia a self.view.layer.transform = transform3D;
entonces el zPosition
no tendrá ningún efecto en la posición. Pero according to the Apple docs, transform
and sublayerTransform
only differ in whether self is transformed or not:
Dos propiedades de capa especifican transformar las matrices:
transform
ysublayerTransform
. La matriz especificada portransform property
es aplicada a la capa y sus subcapas en relación con la capaanchorPoint
. [...] La matriz especificada por la propiedadsublayerTransform
se aplica solo a las subcapas de la capa, en lugar de a la propia capa.
Por lo tanto, es extraño que cambiar eso ocasione que self.view.layer
actúe como 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];
}