sacar rapido llama inferior control configurar como centro calculadora barra atajos aparece acceso iphone ipad orientation

rapido - configurar calculadora iphone



Determine UIInterfaceOrientation en iPad (10)

¿Conoce la propiedad interfaceOrientation de la clase UIViewController ?

- (void) viewDidLoad { [super viewDidLoad]; BOOL isPortrait = UIDeviceOrientationIsPortrait(self.interfaceOrientation); // now do whatever you need }

¿O estás después de la [[UIDevice currentDevice] orientation] ?

No necesito especificar la orientación en este caso, solo necesito detectarlo, pero estoy teniendo problemas. Tengo un código condicional que solo debería funcionar en vertical, y si el dispositivo está en el paisaje, necesito hacer otra cosa. Dado que deviceOrientation no es necesariamente lo mismo que la interfaceOrientation, no puedo encontrar una manera de probar el modo vertical.

La mayoría de los tutoriales que encuentro en Google son formas de forzar el paisaje o hacer algún tipo de rotación. Lo único que quiero hacer es determinar cuál es la orientación. Aquí está mi código, que no está funcionando:

-(void)viewDidLoad { [super viewDidLoad]; //currentOrientation is declared as UIInterfaceOrientation currentOrientation currentOrientation = [[UIApplication sharedApplication] statusBarOrientation]; NSLog(@"%@",currentOrientation); // == NULL }

Necesito determinar el valor de la interfazOrientation y el programa condicionalmente. ¡Gracias por tu ayuda!


A partir de iOS8, las API han quedado en desuso o devuelven resultados inútiles como .FaceUp .FaceDown .FaceUp .FaceDown

Esto se debe a que Apple NO quiere que actualice su UI usando la orientación, sino más bien utilizando clases de tamaño, restricciones y proporción (usando n% de superview).

De hecho, el código dependiente de la orientación puede no proporcionar buenos resultados en todo el rango de dispositivos y casos de uso (especialmente en multitareas)


Especialmente en el lanzamiento, he encontrado que lo siguiente siempre es preciso para la IU, independientemente de lo que diga el UIDevice sobre la orientación.

[UIApplication sharedApplication].statusBarOrientation


Mézclalo un poquito:

BOOL isLandscape = self.view.frame.size.width > self.view.frame.size.height;

(edit) Obviamente, las respuestas anteriores son la forma correcta de hacerlo y esta solución fallaría en una situación en la que los controladores de vista no estén en pantalla completa.


Sé que es una publicación muy antigua. Quisiera agregar un punto para decir que es mejor verificar que la orientación de la barra de estado sea mejor. Siempre que llame a self.interfaceorientation llamará shouldRotateToOrientation cada vez. Si ha escrito algún código en ese método, se ejecutará. ¡Así que ten cuidado!


Ya voté la respuesta por @slycrel, pero me gustaría tomarme el tiempo para escribir esto, y señalar algunas cosas que parecen estar perdidas en esta vieja pregunta, y muchas otras preguntas sobre el tema.

Es cierto que Apple realmente no quiere que actualicemos la mayor parte de nuestra IU en función de los cambios de orientación, pero aún es totalmente posible y a veces necesario caso por caso, y así será hasta que Apple mejore su nuevo (ish) API (por ejemplo, viewWillTransitionToFrame: sería mucho más útil que viewWillTransitionToSize: Just sayin '' )

La razón por la que voté la respuesta de @slycrel está relacionada con lo que debe tener en cuenta como la diferencia lógica entre UIDeviceOrientation y UIInterfaceOrientation .

La barra de estado es lo que denota la UIInterfaceOrientation actualmente conocida de una aplicación. Todo esto sobre FaceUp , FaceDown solo está relacionado con la orientación de un dispositivo, no necesariamente con la de su aplicación. Una aplicación no admite orientaciones de dispositivo de todos modos . Realmente, UIDeviceOrientation se puede ignorar por completo si todo lo que tienes que hacer es asegurarte de diseñar y animar las cosas apropiadamente en tu interfaz, que es el 99% de los casos de uso de un desarrollador de aplicaciones. Esto se logra actualmente con la UIInterfaceOrientation de usuario UIInterfaceOrientation de la respuesta de @slycrel:

[UIApplication sharedApplication].statusBarOrientation

Cabe señalar que la versión readwrite de esta propiedad está en desuso, la versión readonly no.

Toma este ejemplo:

  • Tengo una aplicación que admite TODAS las orientaciones de las interfaces y un controlador de vista raíz que también las admite.
  • Ahora, UIViewController un UIViewController que dará como resultado que la orientación de la barra de estado se convierta en horizontal.
  • La orientación horizontal (izquierda o derecha) a la que se dirige se basa en lo que devuelve preferredInterfaceOrientationForPresentation para ese controlador de vista, cuál es la orientación actual del dispositivo y qué orientaciones de interfaz admite el controlador de vista (consulte el siguiente punto).
  • La barra de estado irá a horizontal, independientemente de la orientación actual del dispositivo, ya que este controlador de vista solo admite el paisaje según lo que devuelve supportedInterfaceOrientations . Digamos que UIInterfaceOrientationMaskLandscape tanto el paisaje a la izquierda como a la derecha con UIInterfaceOrientationMaskLandscape .
  • También quiero animar condicionalmente este controlador de vista en posición con una transformación de rotación . Esto solo será necesario al pasar del retrato o retrato al revés, al paisaje a la izquierda o al paisaje a la derecha. De lo contrario, será una animación de presentación más simple sin rotación.
  • Luego, después de un tiempo y el uso del dispositivo, descarto ese controlador de vista.
  • Ahora quiero animar condicionalmente este controlador de vista fuera de la pantalla con otra transformación de rotación . Esto solo será necesario cuando se vaya del paisaje a la izquierda o a la derecha del paisaje, al retrato o al revés. De lo contrario, será una animación de despido más simple sin rotación.
  • En este punto, la orientación de la barra de estado se convertirá en lo que el sistema decida que sea apropiado para la combinación de la orientación de la interfaz preferida del controlador de vista raíz y las orientaciones de interfaz compatibles, así como la UIDeviceOrientation actual del UIDeviceOrientation .
  • Dado que el controlador de vista vamos a admitir TODAS las orientaciones de interfaz, si la orientación de su dispositivo es FaceUp o FaceDown, no puede adivinar de forma fiable la siguiente UIInterfaceOrientation basada en UIDeviceOrientation , y no es necesario hacerlo de todos modos.
  • Entonces ... orientación de la barra de estado al rescate!

El ejemplo anterior es posible porque la orientación de la barra de estado no se actualiza cuando una transición del controlador de vista está a punto de comenzar (el sistema solicita un delegado de transición para un animador, etc.). Luego se actualiza cuando la transición comienza a animarse (por ejemplo, cuando se llama animationTransition: :). De esta forma, debe tener una buena comparación simplemente usando los valores iniciales y actuales de la UIInterfaceOrientation de UIInterfaceOrientation .

Incluso sin utilizar las transiciones del controlador de visualización, todavía debería ser seguro actualizar las vistas en función de la orientación de la barra de estado.

Tenga en cuenta que si actualiza manualmente la barra de estado y no está utilizando "Ver apariencia de la barra de estado basada en el controlador" en su Info.plist, entonces la lógica de su aplicación debe tener en cuenta cuándo la barra de estado cambiará de orientación y sí lo hizo . Probablemente esté buscando un par de nombres NSNotification para estos casos, que son:

  • UIApplicationWillChangeStatusBarOrientationNotification
  • UIApplicationDidChangeStatusBarOrientationNotification

Además de estos métodos UIApplicationDelegate :

- (void)application:(UIApplication *)application willChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientation duration:(NSTimeInterval)duration; - (void)application:(UIApplication *)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation; - (UIInterfaceOrientationMask)supportedInterfaceOrientationsForWindow:(nullable UIWindow *)window

Y esta otra útil propiedad UIApplication :

@property(nonatomic,readonly) NSTimeInterval statusBarOrientationAnimationDuration;


self.interfaceOrientation no es confiable en ciertas situaciones. Por ejemplo, volver a organizar las pestañas en una aplicación de barra de pestañas devuelve un valor incorrecto.

Sin embargo, [UIApplication sharedApplication].statusBarOrientation siempre es confiable. Me has ahorrado mucho tiempo, Slycrel. Gracias.


UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation; UIInterfaceOrientation statusBarOrientation = [UIApplication sharedApplication].statusBarOrientation; if(deviceOrientation == UIDeviceOrientationFaceUp || deviceOrientation == UIDeviceOrientationFaceDown){ if(debug){ NSLog(@"Nothing to change because it is gone to Flat"); } return; } if(deviceOrientation !=statusBarOrientation){ if(debug){ NSLog(@"/nApple has a bug?:/n UIDeviceOrientation : %d, UIInterfaceOrientation: %d",deviceOrientation, statusBarOrientation ); } }

¡No me creerás hasta que veas en la consola la segunda salida! Algunas situaciones, ¡y existen! - se muestra el último contenido NSLog!

Entonces tienes que hacer algunas soluciones para continuar de esa manera, donde iOS no tiene errores, ¡buena suerte para todos!

Ah, eso ... el moderador del foro tal vez elimine esta publicación también, ¡porque esto no tiene por qué ser y responder en su opinión!

Espero que ayude a alguien una vez, también sucede en el iPhone ... (ahí lo tengo)


-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{</br> if (UIDeviceOrientationIsLandscape(toInterfaceOrientation)) {</br> some instructions; } else { some instructions; } }

Este es un fragmento de uno de mis programas. Por supuesto, también podría usar la declaración if en su notificación ViewDidLoad.


UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation; if ((orientation == UIInterfaceOrientationLandscapeLeft) || (orientation == UIInterfaceOrientationLandscapeRight) ) { //Landscape } else { //Portrait }