È noto che lo zPosition
dei livelli determina solo il livello che copre il livello. Se si tratta di un zPosition
di 10 o 1000 non influenzerà la sua posizione.Su iOS, perché l'impostazione di un sottostratoTrasforma di un livello si trasforma da solo a CATranformLayer?
Cioè, a meno che se si sia use CATransformLayer
to contain those layers, quindi il zPosition
di tali livelli influenzerà la posizione dei livelli.
Tuttavia, il codice seguente in esecuzione su iOS 5.1.1 rende lo zPosition
alterare la posizione dei livelli ... è possibile provarlo in una nuova app Single View e aggiungere il codice seguente a ViewController.m
. Se lo zPosition
di layer2
viene modificato da 88
a 188
, possiamo vedere che il livello si sposta di conseguenza. Quindi no CATransformLayer
è nel codice; perché si comporterà così? (Si prega di citare i documenti Apple o qualsiasi riferimento).
Anche correlato è, se la riga self.view.layer.sublayerTransform = transform3D;
è stata modificata in self.view.layer.transform = transform3D;
quindi il zPosition
non avrà alcun effetto sulla posizione. Ma according to the Apple docs, transform
and sublayerTransform
only differ in whether self is transformed or not:
Due proprietà del livello specificano trasformare matrici:
transform
esublayerTransform
. La matrice specificata datransform property
è applicata al livello e ai relativi sottolivelli in relazione alloanchorPoint
. [...] La matrice specificata dalla proprietàsublayerTransform
si applica solo ai sottolivelli del livello, anziché al livello stesso.
Quindi è strano che il motivo per cui il cambiamento causerà self.view.layer
come un 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];
}