2012-10-01 22 views
5

Mi aplicación tiene controladores de vista que crean subclases shouldautorotateToInterfaceOrientation. Y en él, yo decido la rotación de cada vista. Esto funciona correctamente Pero en iOS6, aunque leo documentos proporcionados por Apple, no puedo entenderlo.No puedo entender el mecanismo de rotación en iOS6

Mi aplicación tiene controlador de navegación como controlador de vista raíz. Este controlador de navegación tiene un controlador de pestañas. Y el controlador de pestañas tiene algunos controladores de vista. Quiero que el primer controlador de vista (en el controlador de pestañas) se vea solo como modo vertical y el segundo controlador de vista (en el controlador de pestañas) visualice tanto el modo retrato como el modo paisaje. Funciona correctamente en iOS5. Pero no sé cómo hacerlo en iOS6. Aunque sé que debo subclase admitidaOrientaciones de interfaz, no funciona cuando ocurre la rotación. Para mi sorpresa, se llama cuando se muestra una vista. ¿Cómo hacer lo que quiero?

Gracias por leer.

+0

debe definir la orientación apoyado para su aplicación en '-aplicación: supportedInterfaceOrientationsForWindow:' 'del archivo AppDelegate.m' o en el' Info.plist' y su views respondería solo al método '-shouldAutorotate:' con un valor 'BOOL', si su vista admite las orientaciones predefinidas o no. el '- shouldAutorotateToInterfaceOrientation:' está en desuso en iOS6. – holex

+0

Gracias holex. Lo he resuelto – eon

Respuesta

0

Cuando utiliza UINavigationController o UITabbarViewController - la aplicación siempre hace lo que dicen en sus shouldAutorotate, supportedInterfaceOrientations métodos.

Puede agregar una categoría para que ellos redirijan estos métodos al controlador que muestran actualmente. De esta manera:

@implementation UINavigationController (Rotation_IOS6) 
-(BOOL)shouldAutorotate 
{ 
    return [[self.viewControllers lastObject] shouldAutorotate]; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return [[self.viewControllers lastObject] supportedInterfaceOrientations]; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation]; 
} 
@end 

similares para UITabbarViewController.

+0

Esto puede tener efectos secundarios no deseados. Piénselo si lo hace, ese es el comportamiento de TODOS los controladores de navegación en todo el sistema, incluso si son presentados por el sistema operativo. Tengo un accidente debido a eso. La creación de subclases es mejor porque usted tiene el control de quién obtiene el comportamiento especial y quién no. – n13

Cuestiones relacionadas