मेरे पास स्प्लिट व्यू टेम्पलेट का उपयोग करके मेरा आईपैड एप्लिकेशन बनाया गया है। मुझे आश्चर्य है कि मेरे एप्लिकेशन को लैंडस्केप मोड में प्रतिबंधित करने का सबसे अच्छा तरीका क्या है?मेरे ऐप को लैंडस्केप मोड में कैसे प्रतिबंधित करें?
मैं DetailViewController.m
मेंshouldAutorotateToInterfaceOrientation:
विधि अधिभावी
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}
लेकिन 4.2 जीएम अभी भी त्रुटिपूर्ण है की कोशिश की है और यह नियंत्रक दृश्य दिखाने के लिए विफल रहता है। मेरे पास अन्य विकल्प क्या हैं?
अग्रिम धन्यवाद।
Update1
मैं पहले से ही एक बग रिपोर्ट दायर की है: Bug ID #8620135
मेरा ऐप लगभग समाप्त हो गया है और मैं एक खोजने के लिए काम arround के बाद से मैं नहीं वे सोचते हैं 4.2 आधिकारिक तौर पर बाहर आने से पहले इसे हल करने जा रहे हैं (जीएम पहले से बाहर है!)
बग को फिर से बनाने के लिए, बस स्प्लिट व्यू टेम्पलेट का उपयोग करें और ऊपर ओवरराइड करें UIViewControllers (RootViewController या DetailViewControllers) में से किसी में विधि
UPDATE2
मैं पाया है एक काम के आसपास। (के लिए पूर्ण काम के आसपास Update3 देखें)
सेट UISupportedInterfaceOrientations केवल लैंडस्केप समर्थन करने के लिए, इस DetailViewController सही ढंग से शुरू करने के लिए (इसलिए सही ढंग से दिखाया गया है)
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
लेकिन अगर इजाजत दी लैंडस्केप मोड में शुरू करने के लिए एप्लिकेशन के लिए बाध्य करेगा आप डिवाइस घुमाने के लिए, यह पोर्ट्रेट मोड बदल जाता है !!!, तो अभी भीshouldAutorotateToIntercafeOrientation
ओवरराइड करने के लिए आवश्यक है:
चर्चा के रूप में
यदि यह कोई बग नहीं होगा तो मैं दृश्य नियंत्रक द्वारा समर्थित नहीं है जो एक अभिविन्यास में ऐप शुरू करते समय चेतावनी या निष्पादन त्रुटि, अपवाद या कुछ की अपेक्षा करेगा। इसके अलावा, केवल DetailViewController क्यों नहीं दिखाता है? यदि यह विनिर्देशन होगा, तो रूटव्यू कंट्रोलर को तब भी लोड करने में असफल होना चाहिए। क्या आपको नहीं लगता? धन्यवाद के लिए आप ... मदद;)
Update3
आगे परीक्षण के बाद मैंने महसूस किया है कि इसके बाद के संस्करण काम के आसपास कुछ मामलों में काम नहीं करता। उदाहरण के लिए जब डिवाइस परिदृश्य में होता है तो ऐप शुरू करने पर काम नहीं करेगा! असली समस्या यह प्रतीत होती है कि आईओएस 4.2 जीएम UISplitViewController में इसके सभी नियंत्रकों की आवश्यकता है कि सभी घूर्णन इसके लोड समय पर उपलब्ध हों। इसलिए उसे चालित करने के लिए जरूरी है ताकि वह लैंडस्केप मोड में लोड हो और फिर उसे अपने व्यू कंट्रोलर को घुमाने की अनुमति न दें।
तो इस कष्टप्रद आईबग के लिए यहां नया काम है।
चरण 1: तो जैसे सेट Info.plist:
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
चरण 2 DetailViewController.m या (SPLITVIEW खाका से) ज
BOOL lockRotation = NO; //WORK-ARROUND: Bug ID# 8620135.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
//WORK-ARROUND: Bug ID# 8620135.
if (lockRotation) {
return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}else{
return YES;
}
}
- (void)viewDidLoad {
[super viewDidLoad];
//set NO here since this is called before shouldAutorotateToInterfaceOrientation method is called
lockRotation = NO; //WORK-ARROUND: Bug ID# 8620135.
}
- (void)viewDidAppear:(BOOL)animated {
//set YES as soon as possible, but after shouldAutorotateToInterfaceOrientation method was called
lockRotation = YES; //WORK-ARROUND: Bug ID# 8620135.
[super viewDidAppear:animated];
}
महत्वपूर्ण नोट में एक नया झंडा सेट करें: कृपया ध्यान दें कि यह बग केवल तब दिखाई देता है जब UISplitViewController लोड होता है और हर बार उसका दृश्य प्रकट होता है। इसलिए, इस बग को देखने के लिए सुनिश्चित करें कि ऐप को पहले समाप्त कर दिया गया था।
शायद एक बग फाइल करें? ;) –
प्रश्न बताता है कि आप DetailViewController में परिवर्तन कर रहे हैं, क्या यह सही नियंत्रक विधि को ओवरराइड करने के लिए है? –
मैंने पहले ही बग – nacho4d