Известно, что zPosition
слоев определяет, какой слой покрывает слой. Является ли это zPosition
10 или 1000, не повлияет на его положение.
То есть, если мы не используем CATransformLayer
, чтобы содержать эти слои, то zPosition
этих слоев повлияет на слои, положение.
Однако следующий код, запущенный в iOS 5.1.1, делает zPosition
изменением положения слоев... вы можете попробовать его в новом приложении Single View и добавить следующий код в ViewController.m
. Если zPosition
of layer2
изменен с 88
на 188
, мы видим, что слой движется соответственно. Таким образом, no CATransformLayer
находится в коде; почему он будет так себя вести? (Пожалуйста, укажите документы Apple или любую ссылку).
Также связано, если строка self.view.layer.sublayerTransform = transform3D;
изменена на self.view.layer.transform = transform3D;
, тогда zPosition
не будет влиять на позицию. Но в соответствии с документами Apple, 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];
}