2010-07-09 21 views
7

मेरा आईफोन एप्लिकेशन अनुकूल अभिविन्यास परिवर्तनों के संबंध में आईपैड पर चलने पर कुछ अजीब व्यवहार प्रदर्शित कर रहा है।आईपैड अभिविन्यास परिवर्तन समस्या

ऐप एक व्यू कंट्रोलर के साथ शुरू होता है (इसे तर्क के लिए ए को कॉल करें) और नेविगेशन नियंत्रक, और चाहिएऑटोरोटेट टूइंटरफेसऑरिएंटेशन केवल पोर्ट के लिए हाँ लौटा रहा है। नेविगेशन नियंत्रक पर, मैं एक व्यू कंट्रोलर (बी देखें) को धक्का देता हूं जो केवल चित्र के लिए हाँ देता है। फिर, मैं नेविगेशन नियंत्रक पर एक और दृश्य नियंत्रक (सी देखें) को धक्का देता हूं जो सभी घूर्णन का समर्थन करता है और घुमाने के लिए अभिविन्यास के आधार पर स्क्रीन पर आइटम समायोजित करता है।

जब यह आईफोन सिम्युलेटर और डिवाइस पर चलाया जाता है, तो यदि आप दृश्य सी पर परिदृश्य में घुमाते हैं और फिर बी को देखने के लिए वापस बटन को टैप करते हैं, तो यह सही चीज करता है और बदलाव बी को पोर्ट्रेट मोड पर वापस देखता है। (सिम्युलेटर में, यह सिम्युलेटर को स्वचालित रूप से पोर्ट्रेट पर स्वचालित रूप से घुमाता है।)

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

यदि मैं आईपैड पर बी देखने के लिए जाता हूं और चारों ओर घूमना शुरू करता हूं, तो जब तक मैं पोर्ट्रेट मोड तक नहीं पहुंच जाता, तब तक ऑटोरोटेट टॉइंटरफेसऑरिएंटेशन तब तक आग लगती है, और फिर सभी सामान्य हो जाते हैं।

एप्लिकेशन आईफोन एसडीके के नवीनतम रिलीज़ संस्करण के साथ बनाया जा रहा है, और इस प्रकार सेटिंग्स को निम्नानुसार बनाया गया है: आईफोन सिम्युलेटर 4.0 का बेस एसडीके, आईफोन के लक्षित डिवाइस परिवार, आईफोन ओएस पर आईफोन ओएस परिनियोजन लक्ष्य 3.1.3।

कोई विचार?

+0

मेरे पास एक ही समस्या है, और मुझे विश्वास है कि यह आईओएस 3.2 में एक बग है। मेरे आईफोन (3.1.2 और 4.0) पर सबकुछ होना चाहिए। अफसोस की बात है, अभिविन्यास को मैन्युअल रूप से बदलने के लिए कोई (दस्तावेज) फ़ंक्शन नहीं है। चलिए देखते हैं कि दूसरों को क्या कहना है ... – cocoapriest

उत्तर

4

एप्पल कहता है:

Case: All child view controllers in your UITabBarController or UINavigationController do not agree on a common orientation set.

Response: To make sure that all your child view controllers rotate correctly, you must implement shouldAutorotateToInterfaceOrientation for each view controller representing each tab or navigation level. Each must agree on the same orientation for that rotate to occur. That is, they all should return YES for the same orientation positions.

http://developer.apple.com/iphone/library/qa/qa2010/qa1688.html

आप नेविगेशन नियंत्रक के भीतर के बजाय अलग-अलग दृश्यों के भीतर डिवाइस अभिविन्यास सेट करने में सक्षम हो सकता है। फिर आप जांच सकते हैं कि परिणाम के आधार पर स्टैक पर कौन सा दृश्य है और घुमाएं। इस तरह, नेविगेशन नियंत्रक सभी अभिविन्यास को भी संभालता है।

+0

यह समस्या नहीं है। कृपया सावधानी से प्रश्न पढ़ें। आईफोन और आईपैड के बीच एक वास्तविक अंतर है, वे इस मुद्दे को कैसे संभालेंगे ... – cocoapriest

+0

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

+2

मुझे लगता है कि यह आपके मामले पर लागू होता है। आपका दृश्य सी सभी ओरिएंटेशन का समर्थन करता है जबकि ए और बी केवल पोर्ट्रेट का समर्थन करता है। ऐप्पल के क्यूए 1688 का कहना है कि यूआईवीविगेशन नियंत्रक के तहत सभी बाल दृश्य नियंत्रकों को उन्मुखता के एक टिप्पणी सेट पर सहमत होना है। [वैसे सवाल] (http://stackoverflow.com/questions/3086684) में मुझे वही समस्या थी (वीसी उन्मुखताओं पर सहमत नहीं थी)। – progrmr

0

यहाँ कुछ कोड मैं उस त्रुटि को रोकने के लिए उपयोग कर रहा हूँ है:

- (void)viewDidLoad { 
    if (self.interfaceOrientation == UIInterfaceOrientationPortrait) { 
     self.view.transform = CGAffineTransformIdentity; 
     self.view.transform = CGAffineTransformMakeRotation(M_PI/2); 
     self.view.bounds = CGRectMake(0.0, 0.0, 480, 320); 
    } 
    [UIView commitAnimations]; 
} 

और

- (void)viewDidLoad { 
    if (self.interfaceOrientation == UIInterfaceOrientationLandscapeRight) { 
     self.view.transform = CGAffineTransformIdentity; 
     self.view.transform = CGAffineTransformMakeRotation(-(M_PI/2)); 
     self.view.bounds = CGRectMake(0, 0, 320, 480);; 
    } 
    [UIView commitAnimations]; 
} 

पर क्या रुख डिवाइस में है आधार पर, आप कोड के कुछ को संशोधित करने की आवश्यकता होगी ।

+0

में दोहराया गया है क्यों दो बार बदलना है? – progrmr

+0

पहला व्यक्ति परिवर्तन (पहचान) के प्रकार को सेट करता है और दूसरा रूपांतरण बदलता है। यह भी चाहिए कि डिवाइस को उस ओरिएंटेशन में होने पर घुमाए जाने के लिए AutoRotateToInterfaceOrientation को घुमाएं। यदि डिवाइस परिदृश्य में है, तो इंटरफ़ेस तब तक घुमाएगा जब तक कि यह पोर्ट्रेट में न हो। मेरे द्वारा सबमिट किया गया कोड आईफोन (320 और 480) के लिए है, लेकिन यदि डिवाइस का अभिविन्यास लांसस्केप है, तो दृश्य पोर्ट्रेट में दिखाई देगा, जिससे उपयोगकर्ता डिवाइस को पोर्ट्रेट (इसके विपरीत) सेट करने के लिए टिल्ट कर देगा। –

+0

मैं प्रोजेमर से सहमत हूं: आपको रूपांतरण संपत्ति को दो बार असाइन करने की आवश्यकता नहीं है। पहला असाइनमेंट केवल अनदेखा कर दिया जाएगा क्योंकि आप इसके साथ कुछ भी नहीं कर रहे हैं। 'CGAffineTransformMakeRotation' एक घूर्णन के अलावा कुछ भी नहीं देता है जिसका अर्थ है एक अतिरिक्त रोटेशन के साथ एक पहचान tranformation। –

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