2011-09-16 11 views
6

Estoy desarrollando una aplicación de 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.Los métodos de delegado de rotación del dispositivo UIViewController no se están llamando en iOS5

  1. Cuando se presenta vc2, le preguntará VC1: shouldAutorotateToInterfaceOrientation: y esto resulta Si 2.In IOS5 (Beta 7) willRotateToInterfaceOrientation :, didRotateFromInterfaceOrientation: no están recibiendo llamadas para esta secuencia. Pero, esto funciona bien en iOS4. ¿Es esto un error en iOS5?

Gracias y Saludos, Deepa

+0

El iOS 5 aún se encuentra bajo NDA –

Respuesta

8

me había informado de un error a Apple y me dio la siguiente respuesta:

"Ingeniería ha determinado que este problema se comporta como se esperaba en base a la siguiente información:

El comportamiento de 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 el puerto enriar.

Existen otras formas de determinar cuál es su orientación cuando se configura un controlador de vista. Por varias razones, confiar en las devoluciones de llamadas de rotación resultó ser problemático.

En general, las devoluciones de llamada de rotación viewController ocurren en dos casos:

cambios de orientación
  1. El dispositivo para los controladores de vista de la jerarquía de ventana
  2. mixtos presentaciones de orientación interfaz. (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.

Intente utilizar viewWillLayoutSubviews: en IOS 5."

+0

¿Cómo resolvió el problema? Estoy teniendo el mismo problema en iOS 8 beta 5. –

4

que se habían enfrentado a un problema similar al probar mi aplicación en IOS5 La disposición de subvistas en el controlador de la vista principal que se utiliza para llegar en mal estado si la orientación ha cambiado. cuando un controlador de vista modal estaba activo.

lo que hice fue para almacenar la bandera orientación actual en el controlador principal. Esta bandera se actualiza en dos lugares en el controlador principal

  1. willAnimateRotationT oInterfaceOrientation:
  2. viewWillLayoutSubviews (esto es sólo en iOS5)

escribo toda la lógica para ajustar los subvistas mediante la comparación de 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 
    } 
} 
Cuestiones relacionadas