servicio - Los métodos de delegado de rotación del dispositivo UIViewController no se están llamando en iOS5
bolsas servicios de salud (2)
Informé un error a Apple y obtuve la siguiente respuesta:
"La ingeniería ha determinado que este problema se comporta como se pretendía según la siguiente información:
El comportamiento de la presentación es correcto: si se comportó de manera diferente en versiones anteriores, era un error. El cambio de comportamiento posiblemente inesperado se refiere al descarte de VC1 que ya no recibe devoluciones de rotación, pero se distribuirá en vertical.
Hay otras maneras de determinar cuál es su orientación cuando un controlador de vista se establece a sí mismo. Por varias razones, confiar en las devoluciones de llamadas de rotación resultó ser problemático.
En general, las devoluciones de llamadas de rotación de viewController ocurren en dos casos:
- La orientación del dispositivo cambia para los controladores de vista en la jerarquía de ventanas
- Presentaciones de orientación de interfaz mixta. (El controlador inferior solo admite el retrato, el dispositivo está en el paisaje y se presenta un controlador de vista que admite el paisaje.) Sin embargo, esto podría decirse que es un error.
Intenta usar viewWillLayoutSubviews: en iOS 5. "
Estoy desarrollando una aplicación para iPhone. En esta aplicación, UIViewController (vc1) presenta otro UIViewController (vc2). vc1 admite las orientaciones vertical y horizontal; vc2 solo admite la orientación vertical.
- Cuando se presenta vc2, se pregunta vc1: shouldAutorotateToInterfaceOrientation: y esto devuelve SÍ 2.En iOS5 (Beta 7) willRotateToInterfaceOrientation :, didRotateFromInterfaceOrientation: no se reciben llamadas para esta secuencia. Pero, esto funciona bien en iOS4. ¿Es esto un error en iOS5?
Gracias y Saludos, Deepa
Me enfrenté a un problema similar al probar mi aplicación en iOS5. El diseño de las subvistas en el controlador de vista principal solía desordenarse si la orientación cambiaba cuando un controlador de vista modal estaba activo.
Lo que hice fue almacenar el indicador de orientación actual en el controlador principal. Esta bandera se actualiza en dos lugares en el controlador principal
- willAnimateRotationToInterfaceOrientation:
- viewWillLayoutSubviews (esto está en iOS5 solamente)
Escribo toda la lógica para ajustar las subvistas al comparar la orientación actual con el valor almacenado. Si son diferentes: actualice la orientación almacenada, actualice sus subvistas.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Any orientation is OK
return YES;
}
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
portrait = UIInterfaceOrientationIsPortrait(toInterfaceOrientation);
// Code to update subview layout goes here
}
-(void)viewWillLayoutSubviews
{
BOOL isPortraitNow = UIInterfaceOrientationIsPortrait(self.interfaceOrientation);
if(isPortraitNow != portrait)
{
DLog(@"Interfaceorientation mismatch!, correcting");
portrait = isPortraitNow;
// Code to update subview layout goes here
}
}