como activo activar iphone cocoa-touch

activo - ¿Cómo determinar programáticamente la orientación de la interfaz de iPhone?



nfc iphone 7 como activar (6)

Aquí hay una códula de códigos que puede serle útil:

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

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?


En un controlador de vista, simplemente puede usar el código:

UIInterfaceOrientation interfaceOrientation = self.interfaceOrientation;

La UIInterfaceOrientation es una enumeración:

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


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

  • El controlador 1 carga, por ejemplo, en ... Retrato.
  • Empujar otro controlador a la pila
  • Mientras está en el segundo controlador, 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 directamente posible determinar si se debe usar un diseño horizontal o vertical. (Estoy haciendo un posicionamiento de diseño personalizado por orientación, por lo que esta es información importante)

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 me encantaría saber si otros se han dirigido de manera diferente.


Puedes obtener orientación de 3 maneras:

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

  2. UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; devuelve UIInterfaceOrientation, 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 esta es la forma más efectiva de recuperar la orientación real de la interfaz.

  3. UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; devuelve UIDeviceOrientation , orientación del dispositivo. Puede acceder a esa propiedad en cualquier punto de su aplicación . 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.


Si simplemente le preocupa que el dispositivo sea horizontal o vertical, hay algunos buenos métodos de conveniencia en ViewController:

UIDeviceOrientationIsLandscape(self.interfaceOrientation) UIDeviceOrientationIsPortrait(self.interfaceOrientation)


La orientación de la barra de estado (statusBarOrientation) siempre devuelve la orientación de la 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];