2010-05-14 11 views
5

मैंने ऐपडिलेगेट में एक दृश्य बनाया है, कि मैं इस तरह की खिड़की में जोड़ता हूं: AppDelegate में डिवाइसऑरिएंटेशन चेक

[window addSubview:myView];
मैं इस दृश्य पर वापस आने पर डिवाइस अभिविन्यास की जांच करने में सक्षम होना चाहता हूं, इसलिए मैं कुछ संशोधन कर सकता हूं यह। ऐप डिलीगेट में मैं इसे कैसे कर सकता हूं?

उत्तर

11

है कि अनुप्रयोग से घूमता है यह देखने के लिए प्रतिनिधि में इन तरीकों में से एक को लागू कर सकते हैं:

- (void)application:(UIApplication *)application willChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientation duration:(NSTimeInterval)duration; 
- (void)application:(UIApplication *)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation; 

या बस के रूप में के साथ की जरूरत UIApplication स्थिति पट्टी के उन्मुखीकरण की जाँच करें:

[[UIApplication sharedApplication] statusBarOrientation]; 

डिवाइस अभिविन्यास, जो इंटरफ़ेस अभिविन्यास से मेल खाता है या नहीं भी हो सकता है:

[[UIDevice currentDevice] orientation]; 
0

सेब उदाहरणों में आप प्रतिनिधि विधि के माध्यम से सूचित किया जाए:

- (void)orientationChanged:(NSNotification *)notification 
{ 
    // We must add a delay here, otherwise we'll swap in the new view 
    // too quickly and we'll get an animation glitch 
    NSLog(@"orientationChanged"); 
    [self performSelector:@selector(updateLandscapeView) withObject:nil afterDelay:0]; 
} 

और फिर एक चित्र स्क्रीन प्रदर्शित करने के लिए:

- (void)updateLandscapeView 
{ 
PortraitView *portraitView = [[PortraitView alloc] init]; 
portraitView.delegate = self; 
UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation; 
if (UIDeviceOrientationIsLandscape(deviceOrientation) && !isShowingLandscapeView) 
{ 
    [self presentModalViewController: portraitView animated:YES]; 
    isShowingLandscapeView = YES; 
    } 
else if (deviceOrientation == UIDeviceOrientationPortrait && isShowingLandscapeView) 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
    isShowingLandscapeView = NO; 
    } 
[portraitView release]; 
} 
बेशक

आप काम करने के लिए इस के लिए एक प्रतिनिधि वर्ग के रूप में PortraitView डिजाइन करने के लिए है जैसा सोचा वैसा।

एकमात्र रास्ता नहीं है लेकिन मुझे लगता है कि यह अच्छी तरह से काम करता है और इसके एप्पल उदाहरणों में। मैं इसे Appdelegate में नहीं करूँगा, बल्कि आपका uiview, हालांकि मैं आपके डिजाइन को नहीं जानता।

+0

कृपया मेरा नया उत्तर देखें, मैं आपके समाधान के साथ नई समस्या का वर्णन करूंगा – ludo

1

यहाँ क्या मैं पहली बार कोशिश की जब एप्लिकेशन didFinishLauching


[[NSNotificationcenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:@"UIDeviceOrientationDidChangeNotification" object: nil]; 

- (void)orientationChanged:(NSNotification *)notification 
{ 
    [self performSelector:@selector(showScreen) withObject:nil afterDelay:0]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"UIDeviceOrientationDidChangeNotification" object:nil]; 
} 

-(void)showScreen { 

UIDeviceOrientation deviceOrientation = [[UIDevice currentDevice] orientation]; 
if (deviceOrientation == UIDeviceOrientationLandscapeLeft || UIDeviceOrientationLandscapeRight) { 

    CGRect screenRect = [[UIScreen mainScreen] bounds]; 

} 

} 

परिदृश्य का पता चला है, लेकिन screenRect शो चौड़ाई में पहली बार लोड कर रहा है है = 768 और ऊंचाई = 1024 (मैं एक में हूँ आईपैड डिवाइस)।

+0

मुझे लगता है कि समस्या यह है कि आप बस जांच रहे हैं कि यह घुमाया गया है या नहीं। आप इसके साथ कुछ नहीं कर रहे हैं। यदि आप एक नया दृश्य प्रस्तुत करते हैं तो आपको यह देखना चाहिए कि सीमाएं आप अपेक्षा करते हैं। जिस तरह से मुझे संदेह है कि ओएस इसे संभाल लेगा, वही है जैसे कि जब तक आप अपने शोसेन में कुछ नहीं करते हैं, तब तक यह अभिविन्यास का जवाब नहीं देता है। अगर यह समझ में आता है .... – Rudiger

+0

नहीं, मैं वास्तव में समझ में नहीं आता, आपने मुझे एक नया दृश्य पेश करने के लिए कहा लेकिन अगर मैं स्क्रीन स्क्रीन अभी भी पोर्ट्रेट मोड को इंगित करता हूं तो मैं यह कैसे कर सकता हूं? – ludo

+0

एक नया UIView बनाएं और इसे प्रस्तुत करें जैसे कि आप किसी अन्य व्यू कंट्रोलर को छोड़कर सिवाय इसके कि यदि आप निब में कुछ भी करते हैं तो इसे परिदृश्य में बनाते हैं। कोड में आप क्या कर रहे हैं यदि अभिविन्यास परिदृश्य है, परिदृश्य में एक नया दृश्य प्रस्तुत करें, और परिदृश्य दृश्य को खारिज कर दें – Rudiger

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