2012-10-04 18 views
6

मैं आईओएस 6 रोटेशन का समर्थन करना चाहता हूं। समस्या यह है कि, मैं बहुत सारे दस्तावेज देख रहा हूं और अतिप्रवाह प्रश्नों को ढेर कर रहा हूं लेकिन गहराई से समाधान में थोड़ा सा नहीं मिला है। मैं केवल देखा है कि मैं अपने दृश्य नियंत्रक वर्गों के लिए इन दोनों तरीकों जोड़ना चाहिए - लेकिन, अगर मैं गलत नहीं हूँ, वे पूर्व आईओएस के रूप में एक ही तरह से काम नहीं करते 6 तरीके:आईओएस 6 रोटेशन: एक व्यू कंट्रोलर को धक्का देना

- (BOOL)shouldAutorotate 
{ 
    return YES; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskAll; // use what is appropriate for you. 
} 

मेरे ऐप वर्तमान में निम्नलिखित कोड का उपयोग कर प्री-आईओएस 6 में घूमता है। ध्यान दें कि मैं यह निर्धारित करने के लिए इंटरफ़ेस अभिविन्यास पैरामीटर का उपयोग करता हूं कि मैं अपने दृश्य नियंत्रक को धक्का दे रहा हूं या नहीं। मैं आईओएस 6 रोटेशन प्रतिनिधियों में इसे कैसे कार्यान्वित करूं?

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { 
    UIInterfaceOrientation toOrientation = self.interfaceOrientation; 

    if (self.tabBarController.view.subviews.count >= 2) 
    { 
     UIView *tabBar = [self.tabBarController.view.subviews objectAtIndex:1]; 

     if(toOrientation != UIInterfaceOrientationLandscapeLeft && toOrientation != UIInterfaceOrientationLandscapeRight) 
     { 
      CUSTOM_DEBUG_LOG("\n\nRotated back to Portrait"); 
      tabBar.hidden = FALSE; 
     } 
    } 
} 

- (void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration 
{ 
    if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight) 
    { 
     CUSTOM_DEBUG_LOG("\nView going landscape"); 
     ScrollViewController *s = [[ScrollViewController alloc] initWithNibName:@"ScrollViewController" bundle:nil]; 
     [self.navigationController pushViewController:s animated:NO]; 
     [s release]; 
     self.tabBarController.tabBar.hidden = YES; 
     self.navigationController.navigationBar.hidden = YES; 
    } 

} 
+1

दृश्य नियंत्रकों के बारे में डब्ल्यूडब्ल्यूडीसी 2012 फिल्म देखें। – matt

+0

मुझे लगता है कि मैंने अपने प्रश्न को सही तरीके से वाक्यांश नहीं दिया है, क्योंकि मेरा ऐप यहां किसी भी उत्तर के बिना काम कर रहा है। मैं मूल रूप से आईओएस में काम करने के लिए रोटेशन प्राप्त करने में सक्षम नहीं था और मैंने सोचा कि विलुप्त ... कार्यों को भी हटा दिया गया था। बाहर निकलता है, वे नहीं हैं। तो मेरा ऐप अभी भी काम करता है। हुर्रे? दुर्भाग्यवश, मेरे पृष्ठ पर विशाल भयानक सफेद सलाखों हैं जिन्हें मुझे छुटकारा पाने की आवश्यकता है। एक और सवाल पोस्ट करने का समय। –

उत्तर

3

चेकआउट this और this अतः चर्चा जोड़ें।

[संपादित करें]

हाँ तरीकों आप का उल्लेख किया, iOS 6.0 में पदावनत नहीं कर रहे हैं और वे कार्य करते रहेंगे। ऑटो रोटेशन कार्यों को बदलने का यह तरीका है। अभी तक यह तय करने के लिए नियंत्रकों की ज़िम्मेदारी थी कि वे घूमते हैं या नहीं, लेकिन अब रूट व्यू कंट्रोलर तय करेगा कि उनके बच्चों को घूमना चाहिए या नहीं। यदि आपके पास रूटव्यू कंट्रोलर सेटअप नहीं है तो आपको इसे विंडो में जोड़ना होगा और फिर rootAcontRotate में guarantAoRotate और समर्थितInterfaceOrientations विधियों को रखना होगा।

+0

अगर मुझे गलत नहीं लगता है, ऐसा लगता है कि यह सिर्फ मेरी इच्छानुसार कोड को स्थानांतरित कर रहा है, फ़ंक्शन को किसी अन्य फ़ंक्शन में घुमाएं, जो अच्छा दिखता है लेकिन कार्यात्मक रूप से कुछ और नहीं करता है। –

+0

क्षमा करें, मैंने आपके प्रश्न को गलत समझा। मेरा जवाब संपादित किया। – applefreak

+0

मैं इसे ले जाऊंगा! धन्यवाद :) –

3

जनक दृश्य अब आईओएस 6 उपवर्ग अपने एनएवी नियंत्रकों में रोटेशन संभालने के लिए और एक bool

- (BOOL)shouldAutorotate { 
    return YES; 
} 

- (NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskPortrait; // your rotation here 
} 
+0

मुझे यकीन नहीं है कि मैं काफी समझता हूं। क्या आप मुझे नमूना कोड का एक स्निपेट दे सकते हैं या मुझे दिखा सकते हैं कि मैं अपने व्यू कंट्रोलर को कैसे दबाऊंगा? आपने सचमुच मुझे कोड के पहले ब्लॉक (थोड़ा अलग वापसी के साथ) चिपकाया है और यह मेरी मदद नहीं करता है। मुझे यह उल्लेख करना चाहिए कि लैंडस्केप मोड के लिए मैं एक अलग दृश्य नियंत्रक को दबा रहा हूं क्योंकि लैंडस्केप यूआई पोर्ट्रेट से बिल्कुल अलग है। –

+1

आप उस कोड को फिर से लिखने पर विचार करना चाहेंगे ताकि आप बस घूर्णन पर लेआउट बदल सकें। यदि अलग-अलग यूआई में वही घटक हैं जो सीधा होगा।यदि विभिन्न घटक हैं, तो आप उचित रूप से दिखा/छुपा सकते हैं। यदि आप वास्तव में अलग-अलग दृश्य नियंत्रकों को रखना चाहते हैं, तो यह शायद सबसे अच्छा काम करेगा यदि कोई अभिभावक दृश्य नियंत्रक था जो घूर्णन पर उचित बाल दृश्य नियंत्रक को जोड़ा/हटाया और/या दिखाया/छुपाया ... इस तरह आप नहीं करते घूर्णन पर धक्का/पॉपिंग दृश्य नियंत्रकों की दृश्य कार्यक्षमताओं के पीछे से निपटना होगा। – Matt

+0

अक्षम/पॉपिंग अक्षम या कुछ अवांछनीय है? ऐप आईफोन के संगीत ऐप के समान ही है, जहां आप किसी भी टैबबार के व्यू कंट्रोलर (हाँ, मेरे ऐप में एक टैबबार है) पर किनारे झुकाते हैं, तो आपको कवरफ्लो में फेंक दिया जाता है। मेरे ऐप के लिए, आपको मेरे लैंडस्केप व्यू कंट्रोलर में फेंक दिया जाता है। यह आईओएस 5 और नीचे के लिए अच्छी तरह से काम करता प्रतीत होता है लेकिन मैं आईओएस 6 के लिए चीजों को समझने की कोशिश कर रहा हूं। मैं भी आईओएस के पुराने संस्करणों के साथ संगतता बनाए रखता हूं। –

1

जब मैंने पहली बार प्रश्न पोस्ट किया था तो मैंने आईओएस 6 रोटेशन कोड को सही ढंग से लागू नहीं किया हो सकता है।

मैंने गलत तरीके से सोचा था कि willAnimateRotationToInterfaceOrientation फ़ंक्शन को आईओएस 6 में बहिष्कृत किया गया था, जिससे मुझे विश्वास था कि एक अभिविन्यास पैरामीटर वाला एक नया आईओएस रोटेशन प्रतिनिधि था। यह मामला नहीं है, इसलिए मेरा ऐप काम करता है।

कोड मैं अपने ऐप में प्लग किया गया था सिर्फ इस:

- (BOOL)shouldAutorotate 
{ 
    return YES; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight); 
} 
+0

+1 "कॉपी और पेस्ट"-योग्यता के लिए +1। अभिविन्यास मास्क विलय वाक्यविन्यास को देखने की तरह महसूस नहीं किया ... –

+2

सुविधा मूल्य UIInterfaceOrientationMaskAllButUpsideDown और भी पठनीय है। – eclux

1

आप एक UINavigationController का उपयोग कर रहे हैं, तो shouldAutomaticallyForwardRotationMethods = YES संपत्ति को ओवरराइड।

फिर मार्क एस की तरह कहा, यह भी shouldAutorotate और supportedInterfaceOrientations बच्चों VC के लिए ओवरराइड।

+0

अच्छा! अच्छी पकड़। मैं आपको एक उछाल दूंगा (: –

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