9

मेरे इंटरफ़ेस में सभी व्यू कंट्रोलर केवल पोर्ट्रेट अभिविन्यास में काम कर रहे हैं, जो कि पोर्ट्रेट या लैंडस्केप उन्मुख हो सकता है।आईओएस: पॉप व्यू कंट्रोलर

मैं निम्नलिखित की तरह कुछ उपयोग परिदृश्य है:

  1. मैं नियंत्रक जो दोनों झुकाव में
  2. उपयोगकर्ता प्रेस "वापस बटन"
परिदृश्य को portait से
  • उपयोगकर्ता परिवर्तन उन्मुखीकरण UITabBarController
  • के लिए काम करता धक्का

    इन क्रियाओं के बाद आवेदन परिदृश्य अभिविन्यास में रहता है और इसे स्वचालित रूप से चित्र में परिवर्तित नहीं करता है।

    मैं समर्थित इंटरफेसऑरिएंटेशंस (मैं आईओएस 6.0 का उपयोग कर) का उपयोग कर व्यू कंट्रोलर ओरिएंटेशन को नियंत्रित करता हूं। मैं क्या गलत करता हूँ? जब उपयोगकर्ता बैक बटन दबाता है तो एप्लिकेशन को स्वचालित रूप से अभिविन्यास बदलने के लिए सही व्यवहार कैसे प्राप्त किया जा सकता है? उत्तर देने के लिए आपका शुक्रिया!

    +0

    इस लिंक पर एक नज़र डालें [http://stackoverflow.com/questions/12650137/how-to-change-the-device-orientation-programmatically-in-ios-6](http://stackoverflow.com/प्रश्न/12650137/कैसे-टू-चेंज-द-डिवाइस-ओरिएंटेशन-प्रोग्रामेटिक-इन-आईओएस -6) –

    +0

    यह परिदृश्य ऐप्पल प्रलेखन में समझाया गया है [यहां] (https://developer.apple.com/library/ ios/featuredarticles/ViewControllerPGforiPhoneOS/RespondingtoDeviceOrientationChanges/RespondingtoDeviceOrientationChanges.html # // apple_ref/doc/यूआईडी/TP40007457-CH7-SW13)। –

    उत्तर

    2

    आईओएस 6 (और संभवतः पहले) में, यदि डिवाइस घुमाने पर दृश्य नियंत्रक ऑफस्क्रीन है, तो उसे कोई सूचना नहीं मिलती है। न ही यह शीर्ष दृश्य नियंत्रक बनने पर willAnimateRotationToInterfaceOrientation:duration: भेजा जाता है।

    आपको दृश्य नियंत्रक के वर्तमान अभिविन्यास का ट्रैक रखने और viewWillAppear: में डिवाइस अभिविन्यास की जांच करने की आवश्यकता है। यदि वे अलग हैं, तो आप इसे सही तरीके से सेट करने के लिए willAnimateRotationToInterfaceOrientation:duration: का उपयोग कर सकते हैं।

    चूंकि ऐसा कुछ है जो आपको बहुत कुछ करने की संभावना है, इसलिए आप एक सामान्य सुपरक्लास बनाना चाहते हैं जो आपके व्यू कंट्रोलर से प्राप्त होता है।

    एक ठेठ समाधान है:

    @implementation MyHandlesOffscreenRotationController 
    { 
        BOOL isShowingPortrait; 
    } 
    
    - (void) viewDidLoad 
    { 
        [super viewDidLoad]; 
    
        isShowingPortrait = UIInterfaceOrientationIsPortrait(
             [[UIApplication sharedApplication] statusBarOrientation]); 
    } 
    
    
    - (void) viewWillAppear:(BOOL)animated 
    { 
        [super viewWillAppear:animated]; 
    
         BOOL currIsPortrait = UIInterfaceOrientationIsPortrait(
               [[UIApplication sharedApplication] statusBarOrientation]); 
    
        if ((isShowingPortrait && !currIsPortrait) || 
         (!isShowingPortrait && currIsPortrait)) { 
         [self willAnimateRotationToInterfaceOrientation: 
           [[UIApplication sharedApplication] statusBarOrientation] 
                   duration:0.0f]; 
        } 
    } 
    
    @end 
    
    +0

    यह एक सभ्य उत्तर है, आपको घुमाए जाने के बाद आपको 'isShowingPortrait' सेट करना होगा, इसलिए इसे अपडेट किया गया है। अन्यथा यह केवल एक बार काम करेगा। (ios7 के लिए भी काम करता है) – zero3nna

    0

    पी.एल. इस विषय में एक अच्छा समाधान है: वर्तमान और तत्काल एक खाली मोडल व्यू कंट्रोलर को खारिज कर दें जो केवल पोर्ट्रेट को अनुमति देता है परिदृश्य

    How to change the device orientation programmatically in iOS 6

    1

    बस एक UINavigationController श्रेणी के अंदर -(BOOL)shouldAutoRotate and - (NSUInteger)supportedInterfaceOrientations ओवरराइड, तो ViewController अन्य ViewController से पॉप के बाद अपने समर्थित उन्मुखीकरण के लिए बारी बारी से बाध्य करेगा।

    @implementation UINavigationController (Rotate) 
    
    - (BOOL)shouldAutorotate 
    { 
        return [self.topViewController shouldAutorotate]; 
    } 
    
    - (NSUInteger)supportedInterfaceOrientations 
    { 
        return [self.topViewController supportedInterfaceOrientations]; 
    } 
    
    @end 
    
    2

    आईओएस 9 और

    पॉप के समय ऊपर सिर्फ अपने viewWillAppear विधि में नीचे उल्लिखित कोड लिखें।

    [[UIDevice currentDevice] setValue:[NSNumber numberWithInteger: UIInterfaceOrientationPortrait]forKey:@"orientation"]; 
    

    इसके साथ, आपका दृश्य पोर्ट्रेट मोड में दिखाई देगा।