레이어의 zPosition
은 어떤 레이어가 어떤 레이어를 덮을지만 결정하는 것으로 알려져 있습니다. zPosition
이 10인지 1000인지는 위치에 영향을 미치지 않습니다.iOS에서 레이어의 sublayerTransform 설정이 CATranformLayer처럼 작동하도록하는 이유는 무엇입니까?
즉, use CATransformLayer
to contain those layers 인 경우가 아니면 해당 레이어의 zPosition
이 레이어의 위치에 영향을줍니다.
그러나 iOS 5.1.1에서 실행되는 다음 코드는 zPosition
이 레이어 위치를 변경하도록합니다 ... 새로운 단일보기 앱에서이 코드를 추가하고 ViewController.m
에 다음 코드를 추가 할 수 있습니다. zPosition
이 layer2
인 경우 88
에서 188
으로 변경되면 그에 따라 레이어가 이동하는 것을 확인할 수 있습니다. 따라서 CATransformLayer
은 코드에 없습니다. 왜 그렇게 행동할까요? (Apple docs 또는 참고 자료를 인용하십시오.)
self.view.layer.sublayerTransform = transform3D;
이 self.view.layer.transform = transform3D;
으로 변경되면 zPosition
은 위치에 아무런 영향을 미치지 않습니다. 그러나 according to the Apple docs, transform
and sublayerTransform
only differ in whether self is transformed or not :
두 레이어 속성이 지정 행렬 변환 :
transform
및sublayerTransform
을.transform property
으로 지정된 행렬은anchorPoint
에 상대적으로 레이어와 그 하위 레이어에 적용되는 입니다. [...]sublayerTransform
속성으로 지정된 행렬은 레이어 자체가 아닌 레이어 하위 레이어 인 에만 적용됩니다.
따라서 왜 변경하면 self.view.layer
이 CATransformLayer
처럼 작동하는 것이 이상합니다. 우리는 레이어 transfrom3D을 할 때
-(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];
}