Orientación iOS6 sigue girando incluso cuando se le dice que no
screen-orientation (3)
Si no desea que la aplicación gire alguna vez, puede eliminar el paisaje de las orientaciones de su interfaz compatible en su info.plist y eso debería hacerlo.
De lo contrario, debe indicarle a su controlador de vista raíz que busque en sus hijos información de orientación.
-Brandon
Parece que tengo dificultades con mi aplicación iOS.
Su objetivo de despliegue es iOS5.0, sin embargo, estoy usando iOS 6.0 SDK.
En mi View Controller tengo:
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationMaskPortrait;
}
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
return (toInterfaceOrientation == UIInterfaceOrientationPortrait);
}
Esto funciona bien cuando se ejecuta en el simulador iOS5. La vista no girará hacia LandScape o boca abajo.
Sin embargo, en el simulador IOS6 (y en un dispositivo), continuará rotando.
Utilicé NSLog
para comprobar que NSLog
se llama y lo hace, dos veces, sin embargo, sigue girando hacia LandScape (derecha o izquierda)
¿Qué estoy haciendo mal?
También extendí el UINavigationController
(My Root View Controller) para incluir esto:
@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
Pero aún no hay éxito.
Gracias.
Editar
Según la respuesta de Matt. También necesitaba extender el UITabBarController con una implementación similar a mi UINavigationController y funcionó.
Espero que esto ayude a alguien más.
El problema podría ser que tienes una interfaz de navegación. ¿Vos si? Si es así, debe crear una subclase UINavigationController y usar una instancia de esa subclase como su controlador de navegación. En esa subclase, aquí es donde implementa las supportedInterfaceOrientations
interfaz supportedInterfaceOrientations
. Lo mismo ocurre con cualquier controlador de vista padre (por ejemplo, UITabBarController).
La razón es que la forma de pensar de iOS 6 sobre la rotación es completamente diferente de iOS 5. Nada más que creas que sabes de iOS 5 se aplica más. En iOS 6 comenzamos en el nivel de la aplicación en sí y trabajamos hacia abajo por medio del delegado de la aplicación al controlador de vista raíz u otro controlador de vista de pantalla completa (por ejemplo, un controlador de vista presentado) y nos detenemos . Un padre ya no consulta a sus hijos.
Además, la aplicación en sí (a través del info.plist o del delegado de la aplicación) debe enumerar todas las orientaciones que alguna parte de la aplicación pueda asumir; los controladores de vista solo pueden solicitar un subconjunto de ellos.
Ver las notas de la versión:
http://developer.apple.com/library/ios/#releasenotes/General/RN-iOSSDK-6_0/_index.html
Sin embargo, tenga en cuenta que esta oración es una mentira:
Para compatibilidad, los controladores de vista que todavía implementan el método shouldAutorotateToInterfaceOrientation: no obtienen los nuevos comportamientos de autorrotación
Por el contrario, en iOS 6 los métodos de autorrotación más antiguos se ignoran por completo; todos obtienen los nuevos comportamientos de autorrotación. No es "opt-in".
Verifique la configuración de su proyecto y la información.plíqueles tienen una prioridad más alta que el delegado de la aplicación. asegúrese de que solo se seleccionen las orientaciones que desea