7

Según el título. Llamar a [[UIDevice currentDevice] BeginGeneratingDeviceOrientationNotifications] no tiene ningún efecto.UIDevice currentDevice "orientación" siempre nulo

DidRotateToInterfaceOrientation, etc. los eventos funcionan bien, pero necesito poder sondear arbitrariamente la orientación del dispositivo.

¿Cómo puedo arreglar/hacer esto?

La larga historia: Tengo una aplicación de pestañas con un controlador de navegación en cada pestaña. La vista raíz de la pestaña número uno es un gráfico que va a pantalla completa cuando la orientación cambia a horizontal; sin embargo, esto debe verificarse cada vez que aparezca la vista, ya que el cambio de orientación podría haberse producido en otro lugar, por lo que esperaba sondear el estado de orientación siempre que aparezca esta vista.

Respuesta

0

¿La [[UIDevice currentDevice] orientation] no le daría el estado de orientación actual? Puede verificar esto en su método viewWillAppear del controlador de vista que desea sondear.

Editar: Aparte de eso, hay varias maneras de obtener la orientación actual, como usar la propiedad statusBarOrientation en UIApplication, o la propiedad interfaceOrientation en UIViewcontroller.

+0

Parece que no ha leído la pregunta. Está diciendo que el método está devolviendo NULL a pesar de que está llamando a beginGeneratingOrientationNotifications. – Jasarien

2

parece una pregunta tonta, pero no lo es

beginGeneratingDeviceOrientationNotifications

(minúsculas b) ...

9

noción de la orientación de UIDevice parece ser sólo disponibles en dispositivos reales. El simulador parece devolver siempre 0 aquí, independientemente de si las notificaciones se han habilitado como sugieren los documentos. Irritantemente inconveniente, pero ahí tienes.

Me parece funciona bien en el dispositivo real:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
    NSLog(@"orientation: %d", [[UIDevice currentDevice] orientation]); 
    [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications]; 
+1

Sí, solo perdí 2 horas tratando de descubrir qué estaba mal, pero de hecho era solo el simulador. Todo funciona bien en el dispositivo. – samvermette

+3

[[UIDevice currentDevice] orientation] no funciona si el usuario ha bloqueado la orientación de su dispositivo desde el Springboard. la orientación es siempre el último valor y no hay notificaciones de cambios. – Jeff

+5

UIDeviceOrientation interfaceOrientation = [UIApplication sharedApplication] .statusBarOrientation; esta alternativa funcionó para mí – iMeMyself

1

Si marca [[UIDevice currentDevice] orientation] en - (void)viewDidLoad siempre obtendrá nula.

comprobarla en * Método de animación * - (void) viewDidAppear:(BOOL) y

+1

"... siempre obtendrás' nil' ". Está esto documentado? –

1

esto es según iMeMyself dicho en los comentarios anteriores - esto me samed mucho tiempo y creo que es la respuesta correcta, así que quería destacar aquí:

UIDeviceOrientation interfaceOrientation = [UIApplication sharedApplication].statusBarOrientation; 

if (UIInterfaceOrientationIsLandscape(interfaceOrientation)) 
{ 
    //do stuff here 
} 
else if (UIInterfaceOrientationIsPortrait(interfaceOrientation)) 
{ 
//or do stuff here 
} 
+0

esto funcionó para mí, pero no debería ser 'UIInterfaceOrientation interfaceOrientation = [....'? – Jimmery

+0

actualizado para el uso anterior – craigk

Cuestiones relacionadas