2010-04-22 9 views
8

Estoy luchando para obtener una aplicación de iPhone que requiera que cada impulso o pop en la pila de controlador Nav cambie de orientación.Forzando UIInterfaceOrientation changes on iPhone

Básicamente la primera vista es retrato, la segunda paisaje el tercer retrato otra vez (Sí, sé que esto es menos que ideal, pero ese es el diseño y tengo que implementarlo).

He pasado por varios consejos aquí ....
How do I detect a rotation on the iPhone without the device autorotating?
Force portrait orientation on pushing new view to UINavigationViewController
Is there a documented way to set the iPhone orientation?
pero sin éxito total.

Ajuste a enlazar con 3.1.2 mi lectura de los artículos vinculados anterior parece indicar que si mi vista vertical empuja una vista con

 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Return YES for supported orientations 
    return ((interfaceOrientation == UIInterfaceOrientationLandscapeRight)); 
} 
Luego entonces que la vista debe aparecer girado a horizontal. Lo que sucede es que aparece en su forma de retrato "roto", luego gira correctamente cuando se gira el dispositivo.

Si devuelvo el controlador a mi vista de retrato (que tiene una rotación automática adecuada ...), entonces permanece en la vista de paisaje rota hasta que el dispositivo vuelve a la orientación vertical.

También he intentado eliminar todos los mensajes de shouldautorotate, y en su lugar forzar la rotación mediante la transformación de la vista. Este tipo de trabajo funciona, y he descubierto que al mover la barra de estado (que está realmente oculta en mi aplicación) [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeRight;, el teclado aparecerá con la orientación correcta cuando se desee.

El problema con este enfoque es que la transformación de la barra de estado es extraña y fea cuando no tiene una barra de estado: una sombra se cierne sobre la página con cada cambio.

So. Qué me estoy perdiendo.

1) ¿Me equivoco al pensar que en 3.1.2 (o posiblemente antes) shouldAutorotateToInterfaceOrientation debería proporcionar la orientación deseada simplemente presionando los controladores?

2) ¿Hay otra forma de hacer que los teclados aparezcan en la orientación correcta?

3) son las API no documentada llama el camino a seguir (por favor no)

Respuesta

4

no debería utilizar [UIViewController shouldAutorotateToInterfaceOrientation:] para desencadenar un cambio de orientación!; solo está ahí para informar al sistema si se permiten las rotaciones automáticas. Sin embargo, debe actualizarlo para especificar la orientación que está permitida.

Si desea cambiar la orientación cuando se muestra una vista en particular, debe llamar al [UIApplication setStatusBarOrientation:animated:] dentro de su método de anulación [UIViewController viewWillAppear:] para cada uno de los controladores de vista que fuerzan una orientación particular. Eso causará un cambio cuando una vista se está empujando hacia la pila y cuando se la quita. Asegúrese de llamar al super en su método de anulación.

Este es también el lugar adecuado para cambiar la forma en que se muestra la barra de estado, si eso es algo que está haciendo.

+0

No estoy seguro de si hay una diferencia entre [UIApplication setStatusBarOreintation .... y [UIApplication sharedApplication] .statusBarOrientation ... Voy a probar, de lo contrario, eso es lo que he hecho, y estoy sufriendo de la sombra de la barra de estado dando vueltas.En la vista de paisaje, utilizo una transformación para mostrar inicialmente la vista en el paisaje. Si luego dejo una vista horizontal con shouldAutorotateToInterfaceOrientation, ¿no se volverá a activar? ¿Cómo anulo eso? – Andiih

+0

Tenga en cuenta que este método ha quedado obsoleto en iOS 9. – fullofsquirrels

Cuestiones relacionadas