2010-06-18 5 views
6

En cierto punto de mi aplicación, me gustaría deshabilitar temporalmente la función de rotación, "bloquear" efectivamente la orientación en el código, similar a lo que hace el interruptor de bloqueo en el iPad en hardware.Cómo bloquear temporalmente la orientación de iPad/iPhone

que estoy haciendo actualmente:

[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications] 

y cuando he terminado, me llame:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications] 

Aunque todo esto parece funcionar, la documentación de la API indica que siempre debe haber una comienza seguido de final - y lo hago esencialmente a la inversa. ¿Hay una API más adecuada para manejar la "orientación de bloqueo"?

Respuesta

10

Creo que es tan simple como no responder a los cambios de orientación de su controlador. Condicionalmente puede devolver verdadero o falso dependiendo de los parámetros que le pasen, no siempre tiene que devolver verdadero.

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    if (rand()%2 == 0) { // evaluate if I should allow rotate 
     return YES; 
    } else { 
     return NO; 
    } 
} 
+0

Thanks - works great! – Eric

+0

Esto es lo que estoy haciendo ahora, pero hay una desventaja: Por ejemplo, si I ** 0. ** El dispositivo y el controlador de vista están en modo vertical. ** 1. ** gire el dispositivo para (digamos) el paisaje (el controlador de vista también gira), ** 2. ** rotación de bloqueo. ** 3. ** gire el dispositivo a retrato (el controlador de vista no gira en este caso, lo cual está bien). ** 4. ** luego desbloquee la rotación, luego el UIViewController no se actualiza a vertical. Tengo que rotarlo nuevamente para obtener el método anterior llamado :( – nacho4d

+0

En ese caso, solo escuche la gravedad del acelerómetro y ajústese en consecuencia – slf

Cuestiones relacionadas