2012-12-12 17 views
18

मैंने आईओएस ऐप विकसित किया है और आईओएस 6 डिवाइस पर इसका परीक्षण किया है। परीक्षण करते समय, मुझे एहसास हुआ कि मेरी ऐप उम्मीद के अनुसार ओरिएंटेशन परिवर्तनों का जवाब नहीं दे रहा है।आईओएस 6 में प्रोग्रामेटिक रूप से डिवाइस के वर्तमान अभिविन्यास को कैसे प्राप्त करें?

// Autorotation (iOS >= 6.0) 
- (BOOL) shouldAutorotate 
{ 
    return NO; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskAll; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return UIInterfaceOrientationMaskPortrait; 
} 

को सटीकता से, मैं जानना चाहता हूँ कि क्या तरीके आईओएस में अभिविन्यास परिवर्तन पर कहा जाता है चाहता हूँ:

यहाँ मेरी कोड है।

+0

"। मेरी कोड रुझान संबंधी काम नहीं कर रहा" माध्यम ? –

+0

असल में मैं जानना चाहता हूं कि जब मैं अपने डिवाइस को घुमाता हूं तो किस विधि को बुलाया जाता है ..? –

+0

यह चाहिएऑटोरोटेट विधि और समर्थित इंटरफ़ेस अभिविन्यास विधि –

उत्तर

47

आप इस कोशिश कर सकते हैं, तो आप बाहर करने में मदद कर सकते हैं:

How to change the device orientation programmatically in iOS 6

या

UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation] 
+9

ध्यान दें कि 'अभिविन्यास का मूल्य | प्रॉपर्टी हमेशा तब तक लौटाती है जब तक कि ग्रीटिंग नोटिफिकेशन को प्रारंभ करने के लिए कॉन्फ़िगरेशन नोटिफिकेशन सक्षम नहीं किया जाता है। '[डॉक्स] (http://developer.apple.com/library/ios/documentation/uikit/reference/UIDevice_Class/Reference/UIDevice.html#//apple_ref/डॉक्टर/यूआईडी/टीपी 40006902-सीएच 3-एसडब्ल्यू 3) – DanSkeel

32

आप इस है, जो आपकी समस्या नहीं सुलझती कोशिश कर सकते हैं।

UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation; 

के लिए App extension Get device current orientation (App Extension)

+0

जब आप डिवाइस को घुमाते हैं तो निम्नलिखित विधियों को बुलाया जाता है। चाहिएऑटोरोटेट टूइंटरफेसऑरिएंटेशन, didRotateFromInterfaceOrientation और willRotateToInterfaceOrientation। – Girish

+2

वास्तव में बुरा विचार। उस संपत्ति पर हुक मत करो। – DanSkeel

+1

@ डैनस्केल यह कैसे बुरा है? यह सही ढंग से काम करता है। – Girish

2

लिंक नीचे देखें UIDevice पर दस्तावेजीकरण का पालन करें।

आप

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 

कॉल करने की आवश्यकता तो हर बार उन्मुखीकरण बदल गया है आप एक UIDeviceOrientationDidChangeNotification प्राप्त होगा।

+0

के साथ भी काम नहीं करेगा प्रिय मैं आईओएस 6 के लिए पूछ रहा हूं .... –

+0

यह 2.0 –

2

This tutorialUIDeviceOrientationDidChangeNotification का उपयोग करके डिवाइस रोटेशन को संभालने के तरीके का एक अच्छा और सरल अवलोकन देता है। उपकरण अभिविन्यास बदलने पर अधिसूचित होने के लिए इसे UIDeviceOrientationDidChangeNotification का उपयोग करने के तरीके को समझने में आपकी सहायता करनी चाहिए।

5

/* आप अपने viewDidLoad में इन कोड घोषित करने के लिए या ViewWillAppear */ जरूरत

- (void)viewDidLoad 

    { 

    [super viewDidLoad]; 

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 

    [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(deviceOrientationDidChange:) name: UIDeviceOrientationDidChangeNotification object: nil]; 
} 

/* अब हमारे डिवाइस जब भी हम अपने डिवाइस के ओरिएंटेशन बदलने एक अधिसूचना दे देंगे, तो आप वर्तमान अभिविन्यास का उपयोग कर अपने कोड या प्रोग्राम को नियंत्रित कर सकते हैं */

- (void)deviceOrientationDidChange:(NSNotification *)notification 

{ 

//Obtaining the current device orientation 

/* Where self.m_CurrentOrientation is member variable in my class of type UIDeviceOrientation */ 

self.m_CurrentOrientation = [[UIDevice currentDevice] orientation]; 

    // Do your Code using the current Orienation 

} 
+0

के बाद से किसी भी आईओएस के लिए काम करता है यह आईओएस 9.2 – Sanju

+0

में मेरे लिए काम नहीं करता है पोर्ट्रेट के लिए जांच कैसे करें और Self.m_CurrentOrientation का उपयोग करके लैंडस्केप? – Sanju

+0

यदि (UIDeviceOrientationIsLandscape (self.m_CurrentOrientation) { // लैंडस्केप ओरिएंटेशन के लिए कोड } – Vicky

0

I n आपका ViewController, डिवाइस का घूर्णन करने के दौरान आप didRotateFromInterfaceOrientation: विधि का उपयोग कर सकते हैं और फिर प्रत्येक अभिविन्यास में जो कुछ भी आपको चाहिए उसे करें।

उदाहरण:

#pragma mark - Rotation 

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; 
    switch (orientation) { 
     case 1: 
     case 2: 
      NSLog(@"portrait"); 
      // your code for portrait... 
      break; 

     case 3: 
     case 4: 
      NSLog(@"landscape"); 
      // your code for landscape... 
      break; 
     default: 
      NSLog(@"other"); 
      // your code for face down or face up... 
      break; 
    } 
} 
2

शायद बेवकूफ लेकिन यह (केवल ViewController में) काम कर रहा है:

if (self.view.frame.size.width > self.view.frame.size.height) { 
    NSLog(@"Hello Landscape"); 
} 
संबंधित मुद्दे