मुझे एक ऐसी ही समस्या है।
मैं एक खेल लैंडस्केप ओरिएंटेशन (दोनों बाएँ और दाएँ परिदृश्य) में काम कर रहा है।
आदेश मैं एक रूट UIViewController का उपयोग एक बहु दृश्य आवेदन का प्रबंधन करने के लिए, एक UIView कि कुछ नहीं करता है के साथ एक डमी UIViewController अर्थात्। मैं तो एक subview के रूप में यह करने के लिए हर दूसरे UIView जोड़ें।
जब अनुप्रयोग शुरू करने, एमुलेटर जल्दी से एक पोर्ट्रेट अभिविन्यास में घूमता है, और मैं इसे का फ्रेम संपत्ति (0, -+८०३२०४८०) की तरह लग रही के साथ अपने विचार से हर एक मिलता है। ध्यान में रखते हुए यह परिणाम सही पक्ष पर एक 160 X 320 आयत द्वारा काटा जा रहा है।
मुझे लगता है कि ध्यान दिया है - shouldAutorotateToInterfaceOrientation: प्रत्येक subview की विधि केवल एक बार कहा जाता है, और जब यह रूट दृश्य में जोड़ दिया जाता है कि क्या होता है। बाद में, जब डिवाइस घूर्णन, केवल रूट दृश्य यह विधि कहा जाता है हो जाता है।
आश्चर्य, में से किसी एक - willAnimate * तरीकों कॉल केवल रूट दृश्य के लिए भेजा जाता है, तो, परिभाषित करने subviews में इनमें से किसी भी व्यर्थ है।
इन तरीकों कहा जाता है हर उन्मुखीकरण एक ओरिएंटेशन द्वारा स्वीकार करने के लिए बदल जाता है - shouldAutorotateToInterfaceOrientation: विधि। इसलिए मैं मैं वहाँ से मेरी subviews 'फ्रेम संपत्ति chnage सकता लगा।
इसे पूरा करने के मैं अपने rootViewController कक्षा में निम्न विधि परिभाषित:
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration
{
subview1_ViewController.view.frame = CGRectMake(0,0,480,320);
subview2_ViewController.view.frame = CGRectMake(0,0,480,320);
...
}
मैं समझता हूँ कि नहीं क्यों फ्रेम संपत्ति अपडेट नहीं किया गया है, लेकिन मैं इस समाधान का काम करता है।
उम्मीद है की यह मदद करेगा....