कृपया ध्यान दें कि यह प्रश्न 2008 का है और अब केवल ऐतिहासिक हित का है।
आईफोन एप्लिकेशन बनाने का सबसे अच्छा तरीका क्या है जो डिवाइस की स्थिति की परवाह किए बिना, शुरुआत से लैंडस्केप मोड में चलता है?
दोनों प्रोग्रामर और इंटरफ़ेस बिल्डर का उपयोग कर।
कृपया ध्यान दें कि यह प्रश्न 2008 का है और अब केवल ऐतिहासिक हित का है।
आईफोन एप्लिकेशन बनाने का सबसे अच्छा तरीका क्या है जो डिवाइस की स्थिति की परवाह किए बिना, शुरुआत से लैंडस्केप मोड में चलता है?
दोनों प्रोग्रामर और इंटरफ़ेस बिल्डर का उपयोग कर।
जवाबों:
कृपया ध्यान दें कि यह उत्तर अब बेहद पुराना है /
यह उत्तर केवल एक ऐतिहासिक जिज्ञासा है ।
उत्तेजित समाचार! जैसा कि नीचे एंड्रयू ने खोजा है, यह समस्या Apple द्वारा 4.0+ में तय की गई है।
ऐसा प्रतीत होता है कि प्रत्येक दृश्य पर दृश्य के आकार को बाध्य करने के लिए यह कोई आवश्यक नहीं है, और परिदृश्य की विशिष्ट गंभीर समस्या "केवल पहली बार काम कर रही" का समाधान किया गया है।
अप्रैल 2011 तक, 4.0 के नीचे कुछ भी परीक्षण या निर्माण करना संभव नहीं है, इसलिए सवाल विशुद्ध रूप से एक ऐतिहासिक जिज्ञासा है। यह अविश्वसनीय है कि यह इतने लंबे समय के लिए डेवलपर्स को कितना परेशान करता है!
यहाँ मूल चर्चा और समाधान है। यह अब पूरी तरह से अप्रासंगिक है, क्योंकि ये सिस्टम भी संचालित नहीं हैं।
इस काम को पूरी तरह से करने के लिए यह बहुत मुश्किल है - खेलने में कम से कम तीन समस्याएं / कीड़े हैं।
इस कोशिश करो .. इंटरफ़ेस बिल्डर परिदृश्य डिजाइन
विशेष रूप से ध्यान दें कि जहां यह कहता है "और आपको हर जगह" आउटरोटेटटेटोइंटरफेस ऑप्रेशन को ठीक से "उपयोग करने की आवश्यकता है" इसका अर्थ है हर जगह, आपके सभी फुलस्क्रीन विचार।
आशा है कि यह इस दुःस्वप्न में मदद करता है!
हाथ में ADDITIONAL प्रसिद्ध समस्या का एक महत्वपूर्ण अनुस्मारक: यदि आप अधिक एक दृश्य (सभी परिदृश्य) के बीच स्वैप करने की कोशिश कर रहे हैं , तो यह पूरी तरह से काम नहीं करता है । यह याद रखना आवश्यक है या आप समस्या पर दिन बर्बाद करेंगे। यह सचमुच नहीं है। यह आईओएस प्लेटफॉर्म पर सबसे बड़ा खुला, ज्ञात, बग है। शाब्दिक रूप से हार्डवेयर को आपके द्वारा लोड किए जाने वाले दूसरे दृश्य को परिदृश्य बनाने का कोई तरीका नहीं है। कष्टप्रद लेकिन सरल वर्कअराउंड, और आपको क्या करना चाहिए, एक तुच्छ मास्टर UIViewController है जो कुछ भी नहीं करता है लेकिन वहां बैठते हैं और आपको अपने विचारों के बीच स्वैप करते हैं।
दूसरे शब्दों में, iOS में एक प्रमुख पता बग के कारण:
[window addSubview:happyThing.view];
[window makeKeyAndVisible];
आप केवल एक बार ही ऐसा कर सकते हैं । बाद में, यदि आप happyThing.view को निकालने का प्रयास करते हैं, और इसके बजाय newThing.view में डालते हैं, तो यह काम नहीं करता - और यह नहीं है। मशीन दृश्य को कभी भी परिदृश्य में नहीं घुमाएगी। कोई चाल ठीक नहीं है, यहां तक कि ऐप्पल भी इसे काम नहीं कर सकता है। आपके द्वारा अपनाई जाने वाली वर्कअराउंड एक समग्र UIViewController है जो बस वहां बैठती है और आपके विभिन्न विचारों (हैप्पीहिंग, न्यूटहिंग, आदि) को रखती है। आशा करता हूँ की ये काम करेगा!
Apple देव साइट से:
लैंडस्केप मोड में अपना आवेदन शुरू करने के लिए ताकि स्टेटस बार तुरंत उपयुक्त स्थिति में हो, उपयुक्त मूल्य (UIInterfaceOrientationLandscapeight या UIInterfaceOrientationLandscapeLeft) के साथ UIInterfaceOrientation कुंजी जोड़ने के लिए अपनी Info.plist फ़ाइल को संपादित करें, जैसा कि लिस्टिंग 2 में दिखाया गया है।
लिस्टिंग 2: लैंडस्केप मोड में अपना एप्लिकेशन शुरू करें
<key>UIInterfaceOrientation</key> <string>UIInterfaceOrientationLandscapeRight</string>
सभी पदों से सारांश और एकीकरण, इसे स्वयं परीक्षण करने के बाद; नीचे 4.x, 5.x के लिए अद्यतन की जाँच करें।
3.2 के रूप में आप कोड से किसी रनिंग एप्लिकेशन के ओरिएंटेशन को नहीं बदल सकते।
लेकिन आप एक निश्चित अभिविन्यास के साथ एक आवेदन शुरू कर सकते हैं, हालांकि ऐसा करना सीधा नहीं है।
इस नुस्खे के साथ आजमाएं:
UISupportedInterfaceOrientations
में अपना ओरिएंटेशन सेट करेंInfo.plist
shouldAutorotateToInterfaceOrientation:
विधि निर्धारित की जाती है (उसी मूल्य को लौटाने के लिए जिसे आप निश्चित रूप से प्लिस्ट में परिभाषित करते हैं)सभी दृश्य नियंत्रकों के साथ एक पृष्ठभूमि दृश्य सेट करें
self.view.frame = CGRectMake(0, 0, 480, 320)
में viewDidLoad
विधि।
अपडेट (iOS 4.x, 5.x) : Apple iOS ऐप प्रोग्रामिंग गाइड में "एडवांस ऐप ट्रिक्स" अध्याय में "लैंडस्केप मोड में लॉन्चिंग" पैराग्राफ है।
संदर्भ:
पहले मैंने info.plist में सेट किया
<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>
फिर मैंने इस कोड को ApplicationDidFinishLaunching में डाला:
CGAffineTransform rotate = CGAffineTransformMakeRotation(1.57079633);
[window setTransform:rotate];
CGRect contentRect = CGRectMake(0, 0, 480, 320);
window.bounds = contentRect;
[window setCenter:CGPointMake(160.0f, 240.0f)];
इस तरह मैं परिदृश्य मोड में इंटरफ़ेस बिल्डर में दृश्य पर काम कर सकता हूं।
sasb और michaelpryor का उत्तर सही प्रतीत होता है, लेकिन यदि यह आपके लिए काम नहीं कर रहा है, तो इस विकल्प को आज़माएँ:
- (void)applicationDidFinishLaunchingUIApplication *)application {
application.statusBarOrientation = UIInterfaceOrientationLandscapeRight;
}
या यह एक:
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
या यह एक:
[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];
आपको window makeKeyAndVisible;
पहले कॉल भी करना पड़ सकता है ।
कुछ लिंक: लैंडस्केप मोड में विकसित करना , iPhone एसडीके: लैंडस्केप मोड को केवल कैसे मजबूर करें?
@ रॉबर्ट: कृपया iPhone एसडीके, एनडीए और स्टैक ओवरफ़्लो देखें ।
मुझे आश्चर्य है कि कोई भी अभी तक इस जवाब के साथ नहीं आया है:
मेरे सभी परीक्षणों में जब एक मोडल व्यू कंट्रोलर को खारिज कर दिया जाता है, तो पेरेंट व्यू कंट्रोलर का पसंदीदा ओरिएंटेशन सेट होता है shouldAutorotateToInterfaceOrientation
जाता है, तब भी जब UINavigationController का हिस्सा होता है। तो इसका समाधान सरल है:
पृष्ठभूमि के लिए UIImageView के साथ एक डमी UIViewController बनाएं। अपने ऐप में स्टार्टअप पर उपयोग की जाने वाली छवि को डिफ़ॉल्ट पर सेट करें।
जब viewWillAppear
आपके रूट व्यू कंट्रोलर में कॉल किया जाता है, तो एनीमेशन के बिना डमी व्यू कंट्रोलर को प्रस्तुत करें।
जब viewDidAppear
आपके डमी व्यू कंट्रोलर को कॉल किया जाता है, तो व्यू कंट्रोलर को एक अच्छे क्रॉस विघटित एनीमेशन के साथ खारिज करें।
न केवल यह काम करता है, लेकिन यह अच्छा लग रहा है! BTW, सिर्फ स्पष्टीकरण के लिए मैं viewWillAppear
इस तरह से रूट व्यू कंट्रोलर करता हूं :
- (void)viewWillAppear:(BOOL)animated
{
if ( dummy != nil ) {
[dummy setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
[self presentModalViewController:dummy animated:NO];
[dummy release];
dummy = nil;
}
...
}
नवीनतम iPhone OS प्रोग्रामिंग गाइड में इस पर एक पूर्ण खंड है, जिसमें नमूना कोड है। मुझे यकीन है कि यह एक हालिया जोड़ है, इसलिए शायद आपने इसे याद किया। यह उन सभी स्थितियों की व्याख्या करता है जिनका आपको पालन करना है; मूल रूप से ...
"लैंडस्केप मोड में लॉन्चिंग" के लिए देखें, पृष्ठ 102।
यह उत्तर देखें: लैंडस्केप मोड केवल iPhone या iPad के लिए
यद्यपि यदि आप मिश्रित मोड का उपयोग कर रहे हैं, तो आप के साथ बेहतर हो सकता है
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];