2011-05-24 18 views
13

मैं किसी भी डिवाइस अभिविन्यास परिवर्तन का पता लगाने की कोशिश कर रहा हूं ताकि मैं विचारों को अपडेट कर सकूं।रोटेशन नोटिफिकेशन देखें: क्यों किया गया RotateFromInterfaceOrientation: कॉल नहीं किया जाता है?

मैं विचारों अद्यतन करने के लिए है कि क्या उन्मुखीकरण पोर्ट्रेट या लैंडस्केप है चाहता हूँ, इसलिए मैं इस पद्धति लागू:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
// Return YES for supported orientations. 
return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationLandscapeLeft); 
} 

मुझे पता है कि मैं विचारों अद्यतन करने के लिए वर्तमान उन्मुखीकरण के लिए ठीक से प्रदर्शित करना चाहते हैं, मैं निम्न विधियों में से कुछ को लागू करने की आवश्यकता होगी:

– willRotateToInterfaceOrientation:duration: 
– willAnimateRotationToInterfaceOrientation:duration: 
– didRotateFromInterfaceOrientation: 
– willAnimateFirstHalfOfRotationToInterfaceOrientation:duration: 
– didAnimateFirstHalfOfRotationToInterfaceOrientation: 
– willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration: 

अब, समस्या यह है कि मुझे समझ नहीं आता क्यों इन तरीकों में से कोई भी निकाल दिया जब मैं सिम्युलेटर बारी बारी है।

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 

लेकिन अभी भी कुछ नहीं:

मैं भी कोड के इस टुकड़े की कोशिश की। तो मैं सोच रहा हूँ, सिम्युलेटर आग रोटेशन अधिसूचना करता है? यदि हां, तो मैं गलत क्या कर रहा हूं? यह करने के लिए

[window addSubview:viewController.view]; 

:

+0

आपने इस विधि को कहां लागू किया? –

+0

हाँ सिम्युलेटर रोटेशन के लिए अधिसूचना भेजता है। – Ishu

+0

@ इशु: जानकारी के लिए धन्यवाद; @ दीपक: यदि आप पद्धति का जिक्र कर रहे हैं तोRotateFromInterfaceOrientation, मैंने इसे अपने व्यू कंट्रोलर की .m फ़ाइल में कार्यान्वित किया; यदि आप [[UIDevice currentDevice] startGeneratingDeviceOrientationNotifications] के बारे में बात कर रहे हैं, तो मैंने दृश्य नियंत्रक – singingAtom

उत्तर

5

त्वरित सारांश, परिवर्तन इस तरह

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:UIDeviceOrientationDidChangeNotification object:nil]; 

अधिसूचना पर्यवेक्षक कुछ जोड़ सकते हैं और विधि जोड़ने की जरूरत है

[window setRootViewController:viewController]; 

मैं अगर मैं मेरा एक मूर्खतापूर्ण गलती के लिए किसी का समय लगा माफी चाहता हूँ। मुझे पता चला कि विधि – willRotateToInterfaceOrientation:duration: क्यों कभी नहीं बुलाया जाएगा। कुछ नेविगेशन नियंत्रक पर मेरा ध्यान लाया:

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

मुझे इन पोस्ट को एक और मंच में मिला और मैंने ऐप प्रतिनिधि को देखा।

CGRect bound = [[UIScreen mainScreen] bounds]; 
window = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, bound.size.width, bound.size.height)]; 
TestViewController *viewController = [[TestViewController alloc] init]; 
[window addSubview:viewController.view]; 
[viewController release]; 
[self.window makeKeyAndVisible]; 

समस्या यह है कि मैं खिड़की के लिए किसी भी दृश्य नियंत्रक की स्थापना नहीं कर रहा था, लेकिन मैं सिर्फ एक दृश्य को जोड़ने किया गया था: मेरे कोड इस प्रकार थी। यह एक गलती थी जो मैंने कुछ परीक्षण करने के लिए जल्दी की वजह से की थी। मुझे इस तरह के कोड को ठीक करना पड़ा:

CGRect bound = [[UIScreen mainScreen] bounds]; 
window = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, bound.size.width, bound.size.height)]; 
TestViewController *viewController = [[TestViewController alloc] init]; 
[window setRootViewController:viewController]; 
[viewController release]; 
[self.window makeKeyAndVisible]; 
52

आप

- (void) didRotate:(NSNotification *)notification 
{ 
     UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; 

     if (orientation == UIDeviceOrientationLandscapeLeft) 
     { 
     NSLog(@"Landscape Left!"); 
     } 
} 
+4

के दृश्य में यह देखा है, यह वही है जो मुझे चाहिए - एक सामान्य सिफारिश है कि [यूआईएप्लिकेशन साझा अनुप्रयोग] प्रतीत होता है।स्थितिबारोइन्टेशन अधिक विश्वसनीय है [यूआईडीवीस अभिविन्यास से] इसलिए लोग पूर्व का उपयोग करना चाह सकते हैं - मैं निश्चित रूप से हूं। – JosephH

+0

आप सही हैं @JosephH – Alkimake

+0

ध्यान दें कि उपरोक्त कोड में, UIDeviceOrientationDidChangeNotification वास्तविक मान नहीं होना चाहिए, वास्तविक मान नहीं। यह बस होता है कि स्थिरता का मान UIDeviceOrientationDidChangeNotification :-) –

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

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