2012-04-26 26 views
5

Devo ottenere l'orientamento del dispositivo da un ViewController. Non posso basare su:Come ottenere l'orientamento del dispositivo tramite il riferimento a UIView?

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; 

perché a volte ritorna orientamento sconosciuto (ad esempio quando il dispositivo pone sul tavolo).

Ho solo bisogno di sapere in quale orientamento è visualizzato il mio UIView corrente (è a sinistra paesaggio o paesaggio a destra). Non ho bisogno di avere questo valore aggiornato quando l'orientamento cambia, voglio solo saperlo, quando lo chiedo. Solo qualche riferimento view.orientation;). C'è qualcosa che potrebbe aiutarmi? Ho letto la documentazione di UIView, ho trovato qualche riferimento a UIWindow, ma nulla che possa aiutarmi.

risposta

13

È anche possibile ottenere l'orientamento dispositivo dal UIApplication, Hai provato a usare

UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 
+1

Questo è esattamente quello che ero io oking per. Ora sono in grado di ottenere l'orientamento dei componenti UIKit e usarlo. Molte grazie! – thelion

-1

seguito è riportato il codice di esempio a fare lo stesso. C'è una variabile denominata deviceOrientation e risponderà all'orientamento corrente del dispositivo, ogni volta che viene richiesto.

UIDeviceOrientation deviceOrientation; 

- (void)viewWillAppear:(BOOL)animated 
{ 
    deviceOrientation = (UIDeviceOrientation)[[UIApplication sharedApplication] statusBarOrientation]; 
    [self willAnimateRotationToInterfaceOrientation:deviceOrientation duration:0.5]; 
} 

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration 
{ 
    deviceOrientation = (UIDeviceOrientation)interfaceOrientation; 
    if(interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight) 
    { 
     NSLog(@"Landscape"); 
    } 
    else 
    { 
     NSLog(@"Portrait"); 
    } 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return TRUE; 
} 
4

UIViewController ha una proprietà

UIInterfaceOrientation interfaceOrientation; 

Quindi nel tuo UIViewController, è possibile accedere l'orientamento attuale del dispositivo in qualsiasi momento tramite

UIInterfaceOrientation myCurrentOrientation = self.interfaceOrientation; 
+0

Obsoleto da iOS 8.0 –

0

Swift versione

let currentOrientation:UIInterfaceOrientation = UIApplication.sharedApplication().statusBarOrientation 


    if currentOrientation.isPortrait { 

     print("PORTRAIT") 

    } else if currentOrientation.isLandscape { 

     print("LANDSCAPE") 

    } 
Problemi correlati