2010-03-25 5 views
42

Esiste un metodo speciale per l'orientamento dell'iPhone? Non ne ho bisogno in gradi o radianti, voglio che restituisca un oggetto UIInterfaceOrientation. Ho solo bisogno di una costruzione if-else comeCome ottenere l'orientamento corrente di iPhone?

if(currentOrientation==UIInterfaceOrientationPortrait ||currentOrientation==UIInterfaceOrientationPortraitUpsideDown) { 
//Code 
} 
if (currentOrientation==UIInterfaceOrientationLandscapeRight ||currentOrientation==UIInterfaceOrientationLandscapeLeft) { 
//Code 
} 

Grazie in anticipo!

risposta

110

Questo è più probabile che ciò che si vuole:

UIInterfaceOrientation interfaceOrientation = [[UIApplication sharedApplication] statusBarOrientation]; 

È quindi possibile utilizzare le macro di sistema come:

if (UIInterfaceOrientationIsPortrait(interfaceOrientation)) 
{ 

} 

Se si desidera che l'uso orientamento del dispositivo:

UIDeviceOrientation deviceOrientation = [[UIDevice currentDevice] orientation]; 

Questo include enumerazioni come UIDeviceOrientationFaceUp e UIDeviceOrientationFaceDown

+0

Sì, ha funzionato! Di te molto! – Knodel

+29

Questo è tecnicamente sbagliato, stai ricevendo un UIDeviceOrientation dalla tua chiamata al metodo e lo memorizzi in un UIInterfaceOrientation. Un UIInterfaceOrientation è uno dei 4 e rappresenta l'aspetto della tua interfaccia. L'UIDeviceOrientation è uno dei 6 (include la posa piatta e la posa piatta sottosopra) e indica l'orientamento del dispositivo, non necessariamente come appare l'interfaccia. L'interfaccia potrebbe essere in modalità verticale, ma se il dispositivo è seduto su un tavolo, restituisce UIDeviceOrientationFaceUp. –

+12

@CoryImdieke: Grazie per aver aggiornato la differenza tra il dispositivo e l'orientamento dell'interfaccia. UIInterfaceOrientation currentOrientation = [[UIApplication sharedApplication] statusBarOrientation]; è l'API corretta – Senthil

11

Come discusso in altre risposte, è necessario l'interfacciaOrientation, non il dispositivoOrientation.

Il modo più semplice per ottenere ciò è utilizzare la proprietà interfaceOrientation sul tuo UIViewController. (Molto spesso, solo: self.interfaceOrientation farà).

valori possibili sono:

UIInterfaceOrientationPortrait   = UIDeviceOrientationPortrait, 
UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown, 
UIInterfaceOrientationLandscapeLeft  = UIDeviceOrientationLandscapeRight, 
UIInterfaceOrientationLandscapeRight  = UIDeviceOrientationLandscapeLeft 

Ricorda: orientamento di sinistra viene immesso ruotando il dispositivo a destra.

+0

Peccato che ora sia deprecato. – Rivera

+0

Sì, questo è deprecato, cosa facciamo adesso? – trapper

4

Ecco un frammento di codice che devo scrivere perché stavo tornando problemi nella mia vista radice quando l'orientamento era cambiato .... Vedo solo richiamare il metodo che avrebbe dovuto essere chiamato ma fatto sembrano essere .... questa grande opera senza errori

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    if ([[UIDevice currentDevice]orientation] == UIInterfaceOrientationLandscapeLeft){ 
     //do something or rather 
     [self 
shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeLeft]; 
     NSLog(@"landscape left"); 
    } 
    if ([[UIDevice currentDevice]orientation] == UIInterfaceOrientationLandscapeRight){ 
     //do something or rather 
     [self 
shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeRight]; 
     NSLog(@"landscape right"); 
    } 
    if ([[UIDevice currentDevice]orientation] == UIInterfaceOrientationPortrait){ 
     //do something or rather 
     [self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationPortrait]; 
     NSLog(@"portrait"); 
    } 
} 
+0

Questo non funzionerà con 'UIDeviceOrientationFaceUp' e' UIDeviceOrientationFaceDown' – trapper

1

UIInterfaceOrientation ora è deprecato, e UIDeviceOrientation include UIDeviceOrientationFaceUp e UIDeviceOrientationFaceDown in modo da non può essere invocata per darvi l'orientamento dell'interfaccia.

La soluzione è piuttosto semplice anche se

if (CGRectGetWidth(self.view.bounds) > CGRectGetHeight(self.view.bounds)) { 
    // Landscape 
} else { 
    // Portrait 
}