Respuesta

14

Utilice la propiedad statusBarOrientation de UIApplication. Puede tener problemas si usa la orientación del dispositivo si es UIDeviceOrientationFaceUp o UIDeviceOrientationFaceDown.

Ejemplo

UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation; 
if (UIInterfaceOrientationIsLandscape(orientation)) 
{ 
    // Do something when in landscape 
} 
else 
{ 
    // Do something when in portrait 
} 
+0

obsoleto en ios 9 – trickster77777

2

Cuando las cargas de aplicaciones, que no conoce su orientation- actual

UIInterfaceOrientation orientation = [[UIDevice currentDevice] orientation]; 
if (orientation == UIDeviceOrientationPortrait) { 
    NSLog(@"portrait");// only works after a rotation, not on loading app 
} 

Una vez que gira el dispositivo, se obtiene la orientación correcta, pero cuando se carga la aplicación, sin cambiar la orientación, parece que usando [[UIDevice currentDevice] orientation] no conoce la orientación actual.

Así que hay que hacer 2 cosas -

  1. intente configurar las orientaciones del dispositivo aceptadas de la aplicación en el archivo plist
  2. En sus UIViewControllers, tendrá que reemplazar el método shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) para volver SI cuando la aplicación debe rotate:
+0

Creo que entendió mal mi pregunta - mis orientaciones cambian muy bien (he definido shouldAutorotate ya), pero quieren saber qué variable que puedo comprobar para ver qué orientación estoy actualmente en. – Gibson

+0

verifique mi respuesta actualizada. necesita implementar - 'UIInterfaceOrientation orientation = [[UIDevice currentDevice orientation] orientation];' –

+1

@Srikar Usé '[[UIDevice currentDevice orientation] orientation]' para este propósito una vez y terminé teniendo un error en mi código cuando la orientación era ' UIDeviceOrientationFaceUp' o 'UIDeviceOrientationFaceDown'. Fue entonces cuando cambié a usar '[UIApplication sharedApplication] .statusBarOrientation', que es del tipo' UIInterfaceOrientation' en lugar de 'UIDeviceOrientation'. Tenga en cuenta que no tiene que mostrar la barra de estado para que este código funcione. Creo que antes de realizar el cambio incluso estaba usando la macro 'UIDeviceOrientationIsLandscape (deviceOrientation)' cuando me encontré con el error boca arriba/cara abajo. – Sam

1

Si la secuenciación es de las llamadas pertinentes significa que no se puede confiar en interfaceOrientation tener el valor correcto a continuación viewWillAppear - suponiendo que los paren t controlador de vista gira - lo más seguro es probablemente self.parentViewController.interfaceOrientation. Si no se puede intentar hacer una primera suposición de [[UIDevice currentDevice] orientation], que no siempre puede ser 100% del dinero (por ejemplo, si el dispositivo está acostado sobre una mesa cuando se inicia su aplicación), pero es probable que le adivine mejor que siempre asumiendo retrato.

4
UIDeviceOrientation getCurrentOrientation() { 
    UIDevice *device = [UIDevice currentDevice]; 
    [device beginGeneratingDeviceOrientationNotifications]; 
    UIDeviceOrientation currentOrientation = device.orientation; 
    [device endGeneratingDeviceOrientationNotifications]; 

    return currentOrientation; 
} 

Es hasta usted para convertir el UIDeviceOrientation a UIInterfaceOrientation.

+0

¡esta es la única solución que funcionó para mí! ¡gracias! – maza23

Cuestiones relacionadas