2009-03-11 10 views
51

Los valores posibles para UIDevice.orientation incluyen UIDeviceOrientationFaceUp y UIDeviceOrientationFaceDown. Si bien puede ser útil saber que el dispositivo es plano, esto no nos dice si es plano y muestra una interfaz orientada en modo retrato o paisaje. ¿Hay alguna manera de encontrar la orientación actual de la GUI en los casos en que el dispositivo devuelve información ambigua? Supongo que podría hacer un seguimiento de los eventos de cambio de orientación para recordar la última orientación retrato/paisaje o verificar el ancho y alto de los límites principales de UIView, pero eso parece kludgey. ¿Hay alguna propiedad en el dispositivo o UIView que me esté faltando?¿Cómo determinar mediante programación la orientación de la interfaz de iPhone?

Respuesta

92

En un viewcontroller puede simplemente usar el código:

UIInterfaceOrientation interfaceOrientation = self.interfaceOrientation; 

El UIInterfaceOrientation es una enumeración:

typedef enum { 
    UIInterfaceOrientationPortrait   = UIDeviceOrientationPortrait, 
    UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown, 
    UIInterfaceOrientationLandscapeLeft  = UIDeviceOrientationLandscapeLeft, 
    UIInterfaceOrientationLandscapeRight  = UIDeviceOrientationLandscapeRight 
} UIInterfaceOrientation; 
+0

si Necesito desarrollar una aplicación de iPhone con toda la orientación de la interfaz de lo que debería hacer ...? ¿Hay algún archivo de doc o tutorial de blog que en su mente dígame por favor ... – Jagds

+2

"No use esta propiedad (UIViewController.interfaceOrientation) para informar las decisiones de diseño. En su lugar, use la propiedad statusBarOrientation, descrita en UIApplication Class Reference." dice Apple –

5

que he visto en la misma situación. Específicamente en este flujo:

  • El controlador 1 carga, por ejemplo, en ... Retrato.
  • Presione otro controlador en la pila
  • Mientras está en el controlador 2, gire la orientación del dispositivo a Horizontal.
  • Coloque el dispositivo sobre una mesa y luego vuelva al controlador original.

En este punto, las comprobaciones de orientación que he visto devuelven una orientación no válida de 5, por lo que no es posible determinar si se debe usar un diseño horizontal o vertical. (Estoy haciendo un posicionamiento de diseño personalizado por orientación, así que esta es información significativa)

En mi caso, se usa una verificación de ancho de límites en la vista para determinar el verdadero estado de las cosas, pero hubiera Me encantaría saber si otros se han dirigido de manera diferente.

+1

He utilizado la orientación de la barra de estado como punto de referencia de trabajo en el iPad. La verificación de Bound no funcionó para mí. – Moshe

94

Usted puede obtener la orientación de 3 formas:

  1. UIInterfaceOrientation orientation = self.interfaceOrientation; vuelve UIInterfaceOrientation, la orientación actual de la interfaz . Es una propiedad de UIViewController, puede acceder al este solo en las clases UIViewController.

  2. UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; devuelve UIInterfaceOrientation, la orientación actual de la barra de estado de la aplicación . Puede acceder a esa propiedad en cualquier punto de su aplicación. Mi experiencia muestra que esto es más manera efectiva para recuperar la orientación de la interfaz real.

  3. UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; devuelve UIDeviceOrientation, orientación del dispositivo. Puede acceder a esa propiedad en en cualquier punto de su solicitud . Pero tenga en cuenta que UIDeviceOrientation no siempre es UIInterfaceOrientation.Por ejemplo, cuando su dispositivo está en una tabla simple puede recibir un valor inesperado.

+2

no es UIInterfaceOrientation, es - UIDeviceOrientation, eso es lo que micco ya mencionó en su publicación. – justadreamer

+3

Tienes razón. UIDeviceOrientation no siempre es UIInterfaceOrientation. – beryllium

+0

Esto me estaba molestando por años. Gracias. – hanno

11

orientación de la barra de estado (statusBarOrientation) devuelve siempre la orientación interfaz incluso si la barra de estado está oculta.

Puede usar la orientación de la barra de estado sin un controlador de vista. Le da la orientación de vista actual, no la orientación del dispositivo.

UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 
14

Si sólo se preocupa de que el dispositivo es horizontal o vertical, hay algunos métodos de conveniencia agradables en el viewcontroller:

UIDeviceOrientationIsLandscape(self.interfaceOrientation) 
UIDeviceOrientationIsPortrait(self.interfaceOrientation) 
+0

Esto funciona bastante bien. ¡Gracias! – Shantanu

1

Aquí hay una codesnippet le puede resultar útil:

UIInterfaceOrientation orientation = [UIDevice currentDevice].orientation; 
NSLog(@" ORIENTATION: %@", UIInterfaceOrientationIsLandscape(orientation) ? @"LANDSCAPE" : @"PORTRAIT"); 
Cuestiones relacionadas