2012-06-04 15 views
5

Me gustaría poder manejar cambios de orientación en mi aplicación actual de iPhone. El problema es que no quiero que la vista de mi controlador gire o cambie de tamaño. Cuando cambia la orientación del dispositivo, solo quiero que un elemento de la IU gire 90 grados en la pantalla.Cuando un dispositivo iOS gira, ¿cómo puedo cambiar la orientación de un solo elemento?

La aplicación de la cámara de Apple es un ejemplo perfecto de esto: cuando la orientación del dispositivo cambia, todos los botones giran, pero la vista en sí no gira.

Supongo que podría cambiar el tamaño de la vista, mover todos mis elementos y animar los botones, pero creo que debe haber una manera más fácil de hacerlo.

Gracias de antemano.

Respuesta

5

1) Puede crear 2 vista jerarquías y cambio que está en la pantalla en willRotateToInterfaceOrientation: see this question

2) O puede manejar todas las rotaciones usted mismo see this question

+1

La opción 2 era perfecta.Gracias por señalarme en la dirección correcta. Tuve problemas para encontrarlo por alguna razón. Aprecio tu publicación y código de muestra. ¡¡Increíble!! – tnbeatty

+0

@tnbeatty Hice una edición a la respuesta de referencia, porque manejó algunos valores de UIDeviceOrientation incorrectamente – Jiri

2

Puede utilizar

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
    { 
if(interfaceOrientation==UIInterfaceOrientationPortrait || interfaceOrientation==UIInterfaceOrientationPortraitUpsideDown) 
    { 
     //Change frames as per orientations 
    } 

    else 
    {  
      //Change frames as per orientations 
    } 


    return NO; 
    } 

y en base a la orientación establecer manualmente los marcos de los elementos de interfaz de usuario que desee cambiar. puede acceder a toda la orientación desde Constants sección de this doc.

EDITAR: Puede utilizar NSNotification para el problema.

UIApplicationDidChangeStatusBarOrientationNotification 

Publicado cuando la orientación de la interfaz de usuario de la aplicación cambios.

El diccionario userInfo contiene un objeto NSNumber que encapsula un valor UIInterfaceOrientation (ver UIInterfaceOrientation). Utilice UIApplicationStatusBarOrientationUserInfoKey acceder a este valor disponibilidad

Available in iOS 2.0 and later. 

declarados en UIApplication.h

+0

Esta es una buena idea, eso es lo que intenté primero. El problema es: supongamos que el dispositivo se inicia en UIInterfaceOrientationPortrait. Si el usuario cambia el dispositivo a UIInterfaceOrientationLandscapeLeft, puedo detectar ese cambio y luego cambiar los marcos. Si el usuario luego vuelve a girar a UIInterfaceOrientationPortrait, no se llamará a este método. – tnbeatty

+0

Eso es interesante, en mi experiencia, esta rutina recibe el nombre de cada rotación (verdadera) que ocurre. – trumpetlicks

+1

Debo aclarar: en mi comentario anterior, "no debería llamarse AutorotateToInterfaceOrientation" porque la orientación del dispositivo nunca se cambia realmente. Por lo tanto, el teléfono piensa que está en Retrato y no llamará a este método cuando el dispositivo cambie a retrato. ¿Tiene sentido? – tnbeatty

Cuestiones relacionadas