बदल दिया गया है, मैं एक दृश्य में एक छद्म 3 डी परिप्रेक्ष्य प्रभाव लागू करने के लिए एक CATransform3D परिवर्तन का उपयोग कर रहा हूं।एक कैलियर के sublayers के लिए एक व्यस्त CATransform3D लागू कर रहा है जो पहले से ही
मैं ट्रांसफॉर्म के पैरामीटर को नियंत्रित करने के लिए आईफोन 4 में जीरोस्कोप का उपयोग कर रहा हूं।
परिणाम कुछ इस तरह है:
मेरा अगला कार्य या तो किया जा रहा से subviews रोकने के लिए है
दृश्य मैं रूपांतरित होने वाले कर रहा हूँ कुछ subviews है मुख्य दृश्य के रूप में परिवर्तित किया गया है, या एक उलटा परिवर्तन लागू करने के लिए ताकि सबव्यूफ अप्रभावित रहें।
मेरा लक्ष्य पर्यवेक्षण के लिए लंबवत प्रत्येक सबव्यू होना है, यह धारणा देते हुए कि वे "खड़े" हैं।
कोड मैं के लिए उपयोग कर रहा हूँ परिणत:
- (void)update:(NSTimer *)timer
{
roll = [[[_manager deviceMotion] attitude] roll];
pitch = [[[_manager deviceMotion] attitude] pitch];
yaw = [[[_manager deviceMotion] attitude] yaw];
CALayer *layer = [self.view layer];
CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, -90 * M_PI/180.0f, 0.0f, 0.0f, 1.0f); // make landscape again
rotationAndPerspectiveTransform.m34 = 1.0/-500; // apply the perspective
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, roll, 1.0f, 0.0f, 0.0f);
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, yaw, 0.0f, 0.0f, 1.0f);
[layer setTransform:rotationAndPerspectiveTransform];
}
मैं बदलना, वाई अक्ष के चारों ओर subview करने के लिए एक 90 डिग्री के परिप्रेक्ष्य रोटेशन लगाने से पलट करने की कोशिश में निम्नलिखित कोड की कोशिश की है:
for (UIView *subview in [self.view subviews])
{
CALayer *sublayer = [subview layer];
//CATransform3D inverseTransformation = [sublayer transform];
CATransform3D inverseTransformation = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0/-500; // apply perspective
inverseTransformation = CATransform3DRotate(inverseTransformation, 90 * M_PI/180.0f, 0.0f, 1.0f, 0.0f);
[sublayer setTransform:inverseTransformation];
}
लेकिन यह सब करने में सफल होता है सबव्यू गायब हो जाता है। यदि मैं [sublayer transform]
के साथ परत से मौजूदा ट्रांसफॉर्म का उपयोग करने का प्रयास करता हूं और इसमें 3 डी रोटेशन लागू करता हूं, तो सबव्यू झिलमिलाहट लागू करते हैं, लेकिन घूमते नहीं हैं।
मैट्रिक्स गणित का मेरा ज्ञान बहुत अच्छा नहीं है, इसलिए मुझे नहीं पता कि यह सही दृष्टिकोण है या नहीं।
मैं उप दृश्यों को सुपर व्यू पर लंबवत कैसे बैठ सकता हूं?