2012-05-06 15 views
7

मैंने हाल ही में आईफोन ऐप से आईपैड पर कुछ कोड पोर्ट करते समय एक समस्या में भाग लिया है। यह here वर्णित मुद्दे से संबंधित हो सकता है, हालांकि मुझे उस प्रश्न के स्पष्टीकरण/समाधान असंतोषजनक पाया गया।आईपैड पर एकाधिक प्रस्तुत दृश्य नियंत्रक और रोटेशन

  1. देखें नियंत्रक 'ए' (रूट देखें नियंत्रक) एक मॉडल दृश्य नियंत्रक "प्रपत्र शीट" मोडल प्रस्तुति शैली के साथ (यह 'बी' कहते हैं) प्रस्तुत करता है: परिदृश्य यह है।

  2. नियंत्रक देखें बी "पूर्ण स्क्रीन" मोडल प्रस्तुति शैली के साथ नियंत्रक 'सी' देखें।

  3. आईपैड घुमाया गया है जबकि नियंत्रक सी शीर्ष-प्रस्तुत प्रस्तुत नियंत्रक है।

  4. सी, बी को बर्खास्त करने पर फिर से प्रदर्शित किया गया है, लेकिन गलत अभिविन्यास है।

जहां तक ​​मेरा बता सकते हैं, एक से अधिक प्रस्तुत दृश्य नियंत्रकों की श्रंखला के साथ कोई समस्या नहीं होनी चाहिए - वास्तव में, इस व्यवहार को स्पष्ट रूप से Presenting View Controllers from Other View Controllers दस्तावेज में समर्थित है। मैं भी iOS 5 Release Notes में निम्नलिखित बयान पढ़ा है:

iOS 5 में

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

जहां तक ​​मेरा बता सकते हैं, यह नहीं होती है - दृश्य नियंत्रक बी -shouldAutoRotateToInterfaceOrientation के लिए एक कॉल प्राप्त करता है लेकिन मूल्य इस कॉल में interfaceOrientation पैरामीटर दृश्य नियंत्रक बी के इंटरफ़ेस उन्मुखीकरण के मूल्य जब यह दृश्य प्रस्तुत है नियंत्रक सी, बर्खास्तगी पर सी के इंटरफेस अभिविन्यास के मूल्य नहीं। चूंकि हम एक आईपैड पर हैं, इसलिए ये सभी व्यू कंट्रोलर YES में -ShouldAutoRotateToInterfaceOrientation में वापस आते हैं। इस प्रकार बी के विचार की सीमाएं कभी भी नहीं बदली जाती हैं, इसलिए -विल्लआउटआउट्स कभी नहीं बुलाया जाता है।

मैं एक कॉलबैक में दृश्य नियंत्रक सी के उन्मुखीकरण बचत बी को पहले बी यह खारिज करते हुए और फिर उस जानकारी अगली बार -shouldAutoRotateToInterfaceOrientation कहा जाता है का उपयोग कर और केवल सी के उन्मुखीकरण के लिए हाँ लौटने जब यह खारिज किया जाता है की कोशिश की है। यह ठीक करता है, टूटा हुआ यूआई जो इस चेक के बिना दिखाई देता है, लेकिन नियंत्रक बी को इस मान पर अपने इंटरफ़ेस अभिविन्यास को अपडेट नहीं करता है, इसलिए बाद के मोडल प्रस्तुतियां डिवाइस के गलत पक्ष से/बाहर एनिमेट हो जाएंगी।

क्या कोई इस काम की तरह एक दृश्य नियंत्रक कॉन्फ़िगरेशन सफलतापूर्वक प्राप्त करने में सक्षम है? यह एक परिदृश्य के असामान्य की तरह प्रतीत नहीं होता है, इसलिए मैं थोड़ा आश्चर्यचकित हूं कि यह काम नहीं कर रहा है क्योंकि मैंने शुरुआत में इसकी अपेक्षा की थी।

अग्रिम धन्यवाद।

उत्तर

0

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

मॉडल प्रस्तुति वास्तव में एकल मृत-अंत इकाइयों (एक एकल दृश्य नियंत्रक या एक नेविगेशन नियंत्रक जिसमें एकाधिक बच्चों को नियंत्रक देखने वाले) के लिए माना जाता है।

ब्याज से, क्या आप कह रहे हैं कि यह आईफोन पर ठीक काम करता है लेकिन आईपैड पर नहीं? या आपने आईफोन संस्करण पर रोटेशन की अनुमति नहीं दी?

मुझे this thread भी मिला है जो कहता है कि रूट व्यू कंट्रोलर से आपके मोडल व्यू कंट्रोलर प्रस्तुत करने में मदद मिल सकती है।

+0

मैं मानता हूं कि यह एक नेविगेशन नियंत्रक को मोडल की जड़ के रूप में उपयोग करने में कम भ्रमित होगा। हालांकि, जिस डिज़ाइन को मैं मिलान करने का प्रयास कर रहा हूं, उसे देखने के लिए फॉर्म-शीट शैली की आवश्यकता है और व्यू कंट्रोलर सी के लिए एक पूर्ण स्क्रीन प्रस्तुति की आवश्यकता है। यह वांछित परिणाम प्राप्त करने के लिए कम से कम प्रतिरोध के मार्ग की तरह लग रहा था, लेकिन दुर्भाग्य से ऐसा लगता है कुछ गैर-स्पष्ट मुद्दे। मुझे वास्तव में यकीन नहीं है कि आईफोन पर यह वही समस्या मौजूद है - आप यह मानने में सही हैं कि फोन पर रोटेशन अक्षम है। – jamie

0

मैंने आईफोन पर पेश किए जाने वाले कई मोडल व्यू कंट्रोलर पर काम किया है। लेआउट के साथ कोई समस्या नहीं है, जब तक कि कई ओरिएंटेशन को संभालने के लिए मेरे अपने कोड में कुछ गड़बड़ न हो। ऑटो रोटेशन विधियों को वास्तव में कभी भी कॉल नहीं किया जाता है जब दृश्य नियंत्रक किसी अन्य व्यू कंट्रोलर के पीछे होता है, इसलिए मैं viewWillAppear पर भी लेआउट समायोजित करता हूं: साथ ही।

viewWillAppear :, willRotateToInterfaceOrientation पर: अवधि :, और didRotateToInterfaceOrientation :, मैं के रूप में की जरूरत है, उदाहरण के लिए सही ओरिएंटेशन के लिए लेआउट समायोजित करेगा:

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [self switchToInterfaceOrientation:self.interfaceOrientation]; 
} 

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
    [super willRotateToInterfaceOrientation:interfaceOrientation duration:duration]; 
    [self switchToInterfaceOrientation:toInterfaceOrientation]; 
    // be careful, self.view.frame is still according to self.interfaceOrientation 
} 

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { 
    [super didRotateFromInterfaceOrientation:fromInterfaceOrientation]; 
    // self.view.frame is updated 
    // update something else here 
} 

- (void)switchToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // update your layout here 
} 

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

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