यह ज्ञात है कि परतों के zPosition
केवल यह निर्धारित करता है कि कौन सी परत परत को कवर करती है। चाहे यह 10 या 1000 का zPosition
है, इसकी स्थिति प्रभावित नहीं होगी।आईओएस पर, एक परत के sublayerTransform क्यों सेट कर रहा है खुद को CATranformLayer की तरह कार्य करने के लिए बारी?
वह है, जब तक कि हम use CATransformLayer
to contain those layers नहीं हैं, तब उन परतों के zPosition
परतों की स्थिति को प्रभावित करेंगे।
हालांकि, निम्नलिखित कोड आईओएस 5.1.1 में चल zPosition
परतों की स्थिति को बदल पड़ता है ... आप इसे एक नए एकल देखें App में प्रयास करें, और ViewController.m
के लिए निम्न कोड जोड़ सकते हैं। layer2
88
से 188
में बदल दिया गया है, तो हम देख सकते हैं कि परत तदनुसार चलता है। तो कोड में CATransformLayer
नहीं है; ऐसा क्यों व्यवहार करेगा? (कृपया ऐप्पल दस्तावेज़ या किसी संदर्भ को उद्धृत करें)।
यह भी संबंधित है, यदि लाइन 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
द्वारा निर्दिष्ट मैट्रिक्स परत और उसके sublayers परत केanchorPoint
से संबंधित है। [...]sublayerTransform
द्वारा निर्दिष्ट मैट्रिक्स केवल परत के बजाय परत के sublayers, पर लागू होता है।
तो यह है कि क्यों बदल रहा है कि 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];
}