2010-01-22 15 views
5

मैंने देखा है कि मुझे अपने डिवाइस & सिम्युलेटर पर बहुत ही अंतरिम अभिविन्यास मिल रहा है।डिवाइस और सिम्युलेटर पर बहुत ही अस्थायी ओरिएंटेशन

मेरे पास एक मॉडल दृश्य नियंत्रक है जो मैं प्रस्तुत करता हूं, और यह मेरे ऐप में एकमात्र चीज है जो रोटेशन का समर्थन करती है।

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

यह अजीब बात है क्योंकि यह 50% काम करता है! जब भी मैं इसे एक्सकोड के माध्यम से लॉन्च करता हूं और ब्रेकपॉइंट्स को सेट करना चाहिए, ऑटोरोटेट टॉइंटरफेसऑरिएंटेशन यह हमेशा काम करता है!

किसी को भी यह था या पता था कि क्या हो रहा है?

+0

कोई विशिष्ट विचार क्या गलत है, लेकिन मुझे लगा कि मैं पूछूंगा कि यूआई में कुछ अजीब होने पर मैं हमेशा क्या पूछता हूं: "क्या आप मुख्य थ्रेड के बाहर UIKit में कुछ भी बुला रहे हैं?" – lawrence

+0

टिप्पणी के लिए धन्यवाद। नहीं, मुझे यकीन है कि मैं ऐसा नहीं कर रहा हूँ! यह सब बहुत परेशान है। –

+0

क्या यह व्यवहार केवल आपके ऐप में होता है या आप इसे अन्य ऐप्स में भी गलत व्यवहार करते देखते हैं? – Jasarien

उत्तर

-1

भले ही आप अपना एप्लिकेशन लैंडस्केप में लॉन्च करने का प्रयास करें, फिर भी आपका फोन इसे पोर्ट्रेट में लॉन्च करेगा और फिर आपके फोन की स्थिति के आधार पर परिदृश्य में जाएगा।

मुझे नहीं पता कि आप इसे पूरा करने के लिए किस कोड का उपयोग कर रहे हैं। नीचे एक है जो ऐप्पल कोड स्निपेट से लिया जाता है। देखें कि यह मदद कर सकता है या नहीं।

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation) 
interfaceOrientation duration:(NSTimeInterval)duration {  
    if (interfaceOrientation == UIInterfaceOrientationPortrait) 
    { 
     self.view = self.portrait; 
     self.view.transform = CGAffineTransformIdentity; 
     self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(0)); 
     self.view.bounds = CGRectMake(0.0, 0.0, 300.0, 480.0); 
    } 
    else if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft) 
    { 
     self.view = self.landscape; 
     self.view.transform = CGAffineTransformIdentity; 
     self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(-90)); 
     self.view.bounds = CGRectMake(0.0, 0.0, 460.0, 320.0); 
    } 
    else if (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) 
    { 
     self.view = self.portrait; 
     self.view.transform = CGAffineTransformIdentity; 
     self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(180)); 
     self.view.bounds = CGRectMake(0.0, 0.0, 300.0, 480.0); 
    } 
    else if (interfaceOrientation == UIInterfaceOrientationLandscapeRight) 
    { 
     self.view = self.landscape; 
     self.view.transform = CGAffineTransformIdentity; 
     self.view.transform = 
     CGAffineTransformMakeRotation(degreesToRadian(90)); 
     self.view.bounds = CGRectMake(0.0, 0.0, 460.0, 320.0); 
    } 
} 
+0

उत्तर के लिए धन्यवाद। यह दो अलग-अलग चित्र और परिदृश्य दृश्यों के बीच स्वैप करने के लिए कोड प्रतीत होता है। मैं केवल एक दृश्य के घूर्णन की इजाजत दे रहा हूं, पूरी तरह से yAsororotateToInterfaceOrientation विधि में YES लौटकर। –

0

मैं, इसी तरह की चुनौतियों का सामना करने के लिए हो रही दृश्य नियंत्रकों जिसकी मूल दृश्य नियंत्रक autorotate नहीं है के लिए ठीक से काम करने autorotation लिया है, हालांकि मेरे अनुभव के सबसे UINavigationController तकरार के रूप में देखें नियंत्रकों मोडल करने का विरोध करने के लिए संबंधित है। फिर भी, मैं निम्नलिखित की कोशिश कर रहा था की सलाह देते हैं:

  1. कॉल presentModalViewController: बल्कि एक गहरी ViewController की तुलना में अपने पदानुक्रम में शीर्ष स्तर दृश्य नियंत्रक पर।

  2. हैं कि यह समाधान नहीं करता है, आपके शीर्ष स्तर दृश्य नियंत्रक उपवर्गीकरण, और अधिभावी अपने shouldAutorotateToInterfaceOrientation कोशिश: कुछ इस तरह देखने के लिए:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    if (self.modalViewController) { 
     return [self.modalViewController shouldAutorotateToInterfaceOrientation:interfaceOrientation]; 
    } 
    return [super shouldAutorotateToInterfaceOrientation:interfaceOrientation]; 
} 
1

के बाद से के रूप में आप "रुक-रुक कर" उल्लेख किया है, मैं कहूंगा कि घूर्णन के बाद आप क्या कर रहे हैं इसके साथ कुछ करना है।

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

यदि कुछ भी मदद नहीं करता है, तो मैं एक नई परियोजना बनाउंगा और फ़ाइलों को एक-एक करके परीक्षण करना शुरू कर दूंगा।

+0

हाँ मुझे निश्चित रूप से लगता है कि कुछ अजीब चल रहा है। मैं तब तक कोड को अलग करने की योजना बना रहा हूं जब तक यह काम नहीं कर रहा है और इस तरह से विच्छेदन कर रहा है। सलाह के लिये धन्यवाद। –

0

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 

बुला करता है जब आप अपने रोटेशन अवगत दृश्य सहायता दिखाएं? (और जब आप इसे खारिज करते हैं तो संभवतः इसे फिर से बंद कर देते हैं?)

दूसरी चीज़ जो मैं देखता हूं वह [UIWindow makeKeyWindow] या [UIResponder becomeFirstResponder] पर संदिग्ध कॉल है।

मैं UIDeviceOrientationDidChangeNotification ईवेंट के लिए भी साइन अप करता हूं और यह सुनिश्चित करता हूं कि मॉड्यूल व्यू को आपके द्वारा प्राप्त प्रत्येक ईवेंट के लिए [UIViewController shouldAutorotateToInterfaceOrientation:] पर कॉल प्राप्त हो।

+0

सहायता के लिए धन्यवाद। मैं सुझावों का प्रयास करूंगा और आपको वापस ले जाऊंगा! –

0

मुझे अंततः पता चला कि समस्या क्या थी!

यह पता चला है कि केवल UIView आप अपने UIWindow में जोड़ते हैं, यह पूछेगा कि घूमना है या नहीं। किसी भी बाद के विचार इस संदेश को प्राप्त नहीं करते हैं। मेरा ऐप लॉन्च पर प्रदर्शित Default.png से एनिमेट करने के लिए एक और दृश्य का उपयोग कर रहा था, और इसे पहले विंडो में जोड़ा गया था!

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