2012-12-14 11 views
7

में आईओएस 6 पर फोर्स लैंडस्केप ओरिएंटेशन मेरे पास एक मास्टर व्यू कंट्रोलर है जो UINavigationController के अंदर है। उस मास्टर व्यू कंट्रोलर में, मेरे पास एक बटन है जो एक विस्तार दृश्य नियंत्रक को धक्का देता है जिसमें इसके अंदर UIWebView है। मैं यह विवरण दृश्य नियंत्रक लोड होने पर लैंडस्केप मोड पर होना चाहता हूं। मास्टर व्यू कंट्रोलर पर वापस जाकर, यह जबरन पोर्ट्रेट मोड पर फिर से वापस चला जाता है। मैं इस पर आईओएस 6 चला रहा हूँ।उद्देश्य-सी

मैंने अन्य समान प्रश्न देखे हैं लेकिन यह मेरे अंत में काम नहीं कर रहा है।

DetailViewController *detailVC = [[DetailViewController alloc] 
             initWithNibName:@"DetailViewController" 
             bundle:nil]; 

    [self.navigationController pushViewController:detailVC 
             animated:YES]; 

मैं कहाँ पर करने के लिए सोच रहा हूँ:

#pragma mark - Orientation Methods 
- (NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskLandscape; 
} 

- (BOOL)shouldAutorotate 
{ 
    return YES; 
} 

यह मेरा कोड जब मैं विवरण दृश्य नियंत्रक धक्का है: मैं एक LandscapeViewController UIViewController का एक उपवर्ग जहाँ मैं इन तरीकों में लिखा है कि बनाया है उपरोक्त कोड पर मेरे लैंडस्केप व्यू कंट्रोलर को उपclass करें या इसे ठीक से उपclass कैसे करें और मेरे विवरण दृश्य नियंत्रक को कैसे दबाएं। अगर मैं नेविगेशन नियंत्रक के लिए पोर्ट्रेट से लैंडस्केप तक अपने विस्तार दृश्य नियंत्रक को धक्का देना संभव नहीं है तो मैं अपना विस्तार दृश्य नियंत्रक भी सामान्य रूप से प्रस्तुत कर सकता हूं। मैं इसे गलत कहां कर रहा हूं?

+0

यह ठीक है कि मैं क्या मन में था: http://stackoverflow.com/questions/11610819/iphone-forcefully-change-orientation-from-portrait-to-landscape-on-navigation?rq = 1 – jaytrixz

उत्तर

8

को ध्यान में रखते: देखें एक: पोर्ट्रेट केवल - दृश्य बी: लैंडस्केप केवल

मैं इसे नेविगेशन नियंत्रक में नहीं कर सका। इसके बजाय मैंने देखा कि बी को देखने के लिए एक दृश्य दृश्य को खोलना था और इस दृश्य में एक नया नेविगेशन नियंत्रक को मजबूर करना था।

यह आईओएस 5 + में मेरे लिए काम कर रहा है।

UINavigationController + Rotation_IOS6.h

#import <UIKit/UIKit.h> 

@interface UINavigationController (Rotation_IOS6) 

- (BOOL)shouldAutorotate; 
- (NSUInteger)supportedInterfaceOrientations; 
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation; 

@end 

UINavigationController + Rotation_IOS6.h

#import "UINavigationController+Rotation_IOS6.h" 

@implementation UINavigationController (Rotation_IOS6) 

- (BOOL)shouldAutorotate 
{ 
    return [self.topViewController shouldAutorotate]; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return [self.topViewController supportedInterfaceOrientations]; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return [self.topViewController preferredInterfaceOrientationForPresentation]; 
} 

@end 

में:

आप इस तरह नेविगेशन नियंत्रक के लिए एक वर्ग बनाने की जरूरत AppDelegate.m ऐड:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{ 
    return UIInterfaceOrientationMaskAll; 
} 

तब में देखें एक:

- (BOOL)shouldAutorotate { 
    return YES; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return UIInterfaceOrientationPortrait; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown); 
} 

भी देखें एक दृश्य बी खोलने के लिए ऐसा करते हैं:

ViewB *vc = [[ViewB alloc] initWithNibName:@"ViewB" bundle:nil]; 

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:vc]; 

[self presentViewController:navigationController animated:YES completion:nil]; 

और अंत में, में देखें बी

- (BOOL)shouldAutorotate { 
    return YES; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskLandscapeLeft; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return UIInterfaceOrientationLandscapeRight; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationLandscapeLeft); 
} 
0

उन्होंने इस संबंध में आईओएस 6 में पूच खराब कर दिया। यहां मैंने जो अभी तक पता लगाया है:

सबसे पहले, ऐप्पल ने एक्सकोड 4.5 के साथ "समर्थित इंटरफ़ेस अभिविन्यास" बटन जोड़े। यह _info.plist में "समर्थित इंटरफ़ेस ओरिएंटेशन" विशेषता से मेल खाता है। शेष बटन काम करने से पहले इन बटनों को सही विकल्पों में टॉगल किया जाना चाहिए। (यदि बटन इसकी संभावना को टॉगल करने से इनकार करते हैं क्योंकि info.plist को सीवीएस या किसी अन्य प्रक्रिया द्वारा लॉक किया जाता है।)

अगला, संपत्ति। विन्डो.रूटव्यू कंट्रोलर सेट होना चाहिए, और "नीचे" ढेर में नियंत्रक देखें। आम तौर पर यह या तो एक नेविगेशन नियंत्रक या एक टैब नियंत्रक होगा।

यदि इच्छा सभी रोटेशन को अक्षम करना है, तो यह "नीचे" दृश्य नियंत्रक, "चाहिएअटोरोटेट" विधि में, बटनों का उपयोग करके किया जा सकता है, या इसे लागू कर सकता है। (यदि विधि छोड़ी गई है तो डिफ़ॉल्ट है हाँ।)

अगर ऑटोमोटेक्शन के साथ ऑटोरोटेशन अक्षम किया गया है, तो अगर MPMoviePlayerViewController प्रदर्शित किया जा रहा है, तो यह स्वतः स्वामित्व में होगा। केवल समर्थित इंटरफ़ेस अभिविन्यास बटन को टॉगल करना इसे रोकने के लिए प्रतीत होता है।

यदि कोई अन्य दृश्य नियंत्रकों को सशर्त रूप से स्वायत्त बनाना चाहता है तो यह गड़बड़ हो जाता है। असल में, आपके "नीचे" दृश्य नियंत्रक को समर्थित इंटरफेसऑरिएंटेशन विधि को लागू करना होगा और वर्तमान शीर्ष दृश्य नियंत्रक, उपयुक्त बिट मास्क के आधार पर वापस लौटना होगा। यह एक दिनचर्या के साथ किया जा सकता है जो शीर्ष दृश्य नियंत्रक के पुराने "चाहिएअटोरोटेट टूइंटरफेसऑरिएंटेशन" विधि से पूछताछ करता है, लेकिन यह थोड़ा बदसूरत है। और भले ही इस योजना को घूर्णन दृश्य नियंत्रक के कोड को संशोधित करने की आवश्यकता नहीं है, फिर भी आपको "समर्थित इंटरफेसऑरिएंटेशन" को लागू करने के लिए घूर्णन वाले "नीचे" वीसी को संशोधित करने की आवश्यकता है, या फिर यह दृश्य वापसी पर घुमाया जाएगा। (कम से कम यह एक साधारण प्रतिलिपि/पेस्ट है।) ऐसा लगता है कि कोई भी बेहतर, अधिक सामान्य योजना के साथ नहीं आया है।