2012-03-23 16 views
7

संदर्भ: मैं एक सामान्य UIViewController.view से UISplitViewController.view पर कस्टम एनीमेशन करने की कोशिश कर रहा हूं। एनीमेशन बाएं से दाएं से दिखाना चाहिए।आईओएस: rootViewController पर गलत ओरिएंटेशन एनिमेटिंग?

मैंने self.window.rootViewController = viewController सेट किया है जहां viewController एक सामान्य UIViewController है।

एक बार जब उपयोगकर्ता कड़ी चोट, निम्नलिखित बुलाया जाता है:

UIView *theWindow = [viewController.view superview]; 

[viewController.view removeFromSuperview]; 
[theWindow addSubview:self.splitViewController.view]; 


CATransition *animation = [CATransition animation]; 
[animation setDuration:0.5]; 
[animation setType:kCATransitionPush]; 
[animation setSubtype:kCATransitionFromLeft]; 
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 

[[theWindow layer] addAnimation:animation forKey:@"SwitchToView1"]; 

जब डिवाइस एक चित्र मोड में है, पूरी तरह से सब कुछ चला गया। हालांकि, जब डिवाइस लैंडस्केप मोड में होता है, तो संक्रमण एनीमेशन ऐसा करता है जैसे डिवाइस अभी भी पोर्ट्रेट मोड में है। उदाहरण के लिए: बाईं ओर से आने के बजाय, यह नीचे से आता है। दोनों विचारों का अभिविन्यास पूरी तरह से सही है। केवल संक्रमण अजीब है।

+0

आप दूसरी दिशा में परिदृश्य को बारी बारी से हैं, एनीमेशन ऊपर से होती है? या यह नीचे से है कि आप किस तरह से परिदृश्य मोड में जाते हैं? स्थिरता परत के बाईं ओर से एनीमेशन लाता है। मुझे आश्चर्य है कि परत का फ्रेम अपडेट नहीं किया गया है, तो घूर्णन के बाद परत की बाईं तरफ अब नीचे क्या था। – jmstone617

+0

यह सही है। एनीमेशन किसी भी अभिविन्यास परिवर्तन को अनदेखा करता है। यह सुनिश्चित करने के लिए कि परत को अपडेट किया जाए, इस पर कोई सुझाव? – Byte

+0

मुझे एक ही समस्या है - कैलियर का अभिविन्यास सिर्फ इसके विचार से मेल नहीं खाता है। इसके बारे में कुछ अन्य समान पद प्रतीत होते हैं, लेकिन मेरे लिए कोई भी समाधान काम नहीं करता है। 90 डिग्री के स्तर से परत को घूर्णन करने से भी दृश्य घूमता है, जिससे यह मदद नहीं करता .. – jonydep

उत्तर

9

तो, मैं आपके कोड के साथ खेल रहा हूं (मैंने आपके प्रोजेक्ट को सेट अप करने का सर्वोत्तम अनुमान लगाया है), और मैं निम्नलिखित कोड के साथ वांछित प्रभाव प्राप्त करने में सक्षम था। मैंने परतों, विचारों, या sublayers, आदि के फ्रेम और सीमाओं को स्थापित करने की कोशिश की, और इनमें से कोई भी काम नहीं किया। CATransform3D, CATransform3DRotates, आदि भी चाल नहीं कर रहे थे। मैं एक ठोस घंटे के लिए भी Googled। या तो कोई भी आपकी समस्या नहीं है, या किसी ने भी आपकी समस्या हल नहीं की है। भले ही, इस समाधान काम करता है, और जब तक कुछ कोर एनिमेशन गुरु एक बेहतर समाधान प्रदान कर सकते हैं, तो आप इस के लिए स्वागत कर रहे हैं:

- (void)swipeGesture:(UISwipeGestureRecognizer *)sender { 

UIView *theWindow = [self.viewController.view superview]; 

UIInterfaceOrientation interfaceOrientation = self.viewController.interfaceOrientation; 
NSString *subtypeDirection; 
if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft) { 
    subtypeDirection = kCATransitionFromTop; 
} 
else if (interfaceOrientation == UIInterfaceOrientationLandscapeRight) { 
    subtypeDirection = kCATransitionFromBottom; 
} 
else { 
    subtypeDirection = kCATransitionFromLeft; 
} 

[self.viewController.view removeFromSuperview]; 
[theWindow addSubview:self.splitViewController.view]; 

CATransition *animation = [CATransition animation]; 
[animation setDuration:0.5]; 
[animation setType:kCATransitionPush]; 
[animation setSubtype:subtypeDirection]; 
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 

[[theWindow layer] addAnimation:animation forKey:@"SwitchToView1"]; 
} 
+0

यह समाधान काम करता है, हालांकि मुझे उम्मीद है कि यह इस पर नहीं आना चाहिए (मैन्युअल रूप से संक्रमण समायोजित करें)। मेरे पास अन्य एनीमेशन है जो विंडो ओरिएंटेशन पर निर्भर करता है जो इस पर लागू नहीं होता है। जब तक एक बेहतर समाधान नहीं आ जाता है, तो बक्षीस खत्म होने से पहले मैं आपके उत्तर को सही तरीके से चिह्नित करूंगा। धन्यवाद। – Byte

+1

समझा। मुझे खेद है कि मैं आपको एक बेहतर समाधान प्रदान नहीं कर सका। मैंने एक नमूना प्रोजेक्ट स्थापित किया और कल कुछ खोजने के लिए एक अच्छा 3 घंटे बिताया। विचार सरल है: विंडो की परत के फ्रेम को अपडेट करें ताकि यह प्रारंभिक दृश्य की परत के अभिविन्यास से मेल खा सके। अफसोस की बात है, इसे अभ्यास में डालना उतना आसान नहीं लगता है। – jmstone617

+0

क्या मैं सोच रहा हूं कि यह केवल संक्रमण के लिए सही दिशा का चयन करता है? यह अभी भी संक्रमण के "फ्रेम" आकार को समायोजित नहीं करता है? – jonydep

संबंधित मुद्दे