2012-12-12 13 views
18

Ho sviluppato un'applicazione iOS e l'ho provata su dispositivo iOS6. Durante i test, mi sono reso conto che la mia app non risponde ai cambiamenti di orientamento come previsto.Come ottenere l'orientamento corrente del dispositivo a livello di codice in iOS 6?

Ecco il mio codice:

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

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskAll; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return UIInterfaceOrientationMaskPortrait; 
} 

Precisamente, voglio sapere che quali metodi sono chiamati sui cambiamenti di orientamento in iOS.

+0

"il mio codice non funziona per quanto riguarda l'orientamento" si intende ? –

+0

In realtà voglio sapere quale metodo viene chiamato quando ruoto il mio dispositivo ..? –

+0

Chiamerà il metodo shouldAutorotate e il metodo di orientamento dell'interfaccia supportato –

risposta

47

Si può provare questo, può dare una mano:

How to change the device orientation programmatically in iOS 6

O

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

Si noti che 'Il valore di | orientation | la proprietà restituisce sempre 0 a meno che le notifiche di orientamento siano state abilitate chiamando beginGeneratingDeviceOrientationNotifications. [Docs] (http://developer.apple.com/library/ios/documentation/uikit/reference/UIDevice_Class/Reference/UIDevice.html#//apple_ref/doc/uid/TP40006902-CH3-SW3) – DanSkeel

32

si può provare questo, che risolve il problema.

UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation; 

consultare di seguito collegamento per App extension Get device current orientation (App Extension)

+0

I seguenti metodi vengono chiamati quando si ruota il dispositivo. shouldAutorotateToInterfaceOrientation, didRotateFromInterfaceOrientation e willRotateToInterfaceOrientation. – Girish

+2

Davvero una cattiva idea. Non agganciare a quella proprietà. – DanSkeel

+1

@DanSkeel come va male? Funziona correttamente. – Girish

2

Seguire la documentazione su UIDevice.

è necessario chiamare

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 

Poi ogni volta che l'orientamento è cambiato riceverete un UIDeviceOrientationDidChangeNotification.

+0

Gentile, sto chiedendo iOS 6 .... –

+0

Questo funziona per qualsiasi iOS dal 2.0 –

2

This tutorial offre una panoramica semplice e intuitiva su come gestire la rotazione del dispositivo utilizzando UIDeviceOrientationDidChangeNotification. Dovrebbe aiutare a capire come usare UIDeviceOrientationDidChangeNotification per ricevere una notifica quando l'orientamento del dispositivo è cambiato.

5

/* è necessario dichiarare questi codice nel tuo viewDidLoad o viewWillAppear */

- (void)viewDidLoad 

    { 

    [super viewDidLoad]; 

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 

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

/* Ora il nostro dispositivo darà una notifica ogni volta che si cambia l'orientamento del nostro dispositivo, così è possibile controllare il codice o programma utilizzando l'orientamento corrente */

- (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

questo non funziona per me in iOS9.2 – Sanju

+0

come mettere il controllo per Portrait e Orizzontale usando self.m_CurrentOrientation? – Sanju

+0

if (UIDeviceOrientationIsLandscape (self.m_CurrentOrientation) { // codice per l'orientamento orizzontale } – Vicky

0

I Nel ViewController, è possibile utilizzare il metodo didRotateFromInterfaceOrientation: per rilevare quando il dispositivo è stato ruotato e quindi fare tutto ciò che è necessario in ogni orientamento.

Esempio:

#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

Forse stupido, ma si sta lavorando (solo in ViewController):

if (self.view.frame.size.width > self.view.frame.size.height) { 
    NSLog(@"Hello Landscape"); 
} 
Problemi correlati