Orientación de interfaz en iOS 6.0

Cómo utilizar los siguientes métodos para admitir la orientación de la interfaz en iOS 6.0:

shouldAutorotate supportedInterfaceOrientations preferredInterfaceOrientationForPresentation 

Como “shouldAutorotateToInterfaceOrientation” está en desuso en iOS 6.0.

Proporcione fragmentos de código para respaldar sus respuestas.

Gracias.

Método obsoleto en iOS 5:

 // Override to allow orientations other than the default portrait orientation. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return (interfaceOrientation == UIInterfaceOrientationLandscapeRight); } 

Reemplazo en iOS 6 y el equivalente de este método obsoleto de iOS 5 anterior:

 - (BOOL) shouldAutorotate { return YES; } -(NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscapeRight; } 

Espero que esto ayude.


[edit # 1: Agregué mi UIViewController que se inicia con éxito en modo vertical en XCode 4.5 en el simulador de iPhone 6.0]

 #import "FirstViewController.h" @interface FirstViewController () @end @implementation FirstViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } -(BOOL)shouldAutorotate { return NO; } -(NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskAll; } - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { return UIInterfaceOrientationMaskPortrait; } 

[#edit 2: código de ejemplo de la aplicación de solo paisaje que admite iOS 5 e iOS 6]

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationLandscapeRight) || (interfaceOrientation == UIInterfaceOrientationLandscapeLeft); } - (BOOL)shouldAutorotate { return YES; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; } - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { return UIInterfaceOrientationLandscapeLeft; } 

Por cierto, su configuración en la configuración de su proyecto Xcode ahora tiene prioridad. Asegúrese de establecer correctamente la matriz “Orientaciones de interfaz admitidas” en la configuración de su proyecto. Ese fue el problema para mí. Se eliminaron los no deseados y mi aplicación funcionó como lo hizo cuando compilé con Xcode 4.4.1

Mi aplicación tiene una instancia de una subclase UINavigationController personalizada, que presenta varios controles de vista, todos en modo retrato, excepto cuando se reproduce un video, en cuyo caso deseo permitir adicionalmente ambas orientaciones del paisaje.

Basado en la respuesta de @uerceg, este es mi código.

Primero, habilité Portrait, Landscape Left y Landscape en Xcode -> Target -> Summary.

En la implementación de la subclase UINavigationController, importo # ed .

Luego implementé estos métodos:

 // Autorotation (iOS <= 5.x) - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { if ([self modalViewController] && [[self modalViewController] isKindOfClass:[MPMoviePlayerController class]]) { // Playing Video: Anything but 'Portrait (Upside down)' is OK return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); } else{ // NOT Playing Video: Only 'Portrait' is OK return (interfaceOrientation == UIInterfaceOrientationPortrait); } } // Autorotation (iOS >= 6.0) - (BOOL) shouldAutorotate { return YES; } -(NSUInteger)supportedInterfaceOrientations { NSUInteger orientations = UIInterfaceOrientationMaskPortrait; if ([self modalViewController] && [[self modalViewController] isKindOfClass:[MPMoviePlayerController class]]) { // Playing Video, additionally allow both landscape orientations: orientations |= UIInterfaceOrientationMaskLandscapeLeft; orientations |= UIInterfaceOrientationMaskLandscapeRight; } return orientations; } 

El código de NicolasMiari funcionó para mí. Un giro diferente tuve un UITabBarController que presentaba UINavigationControllers y yo estaba usando StoryBoards. La implementación de la subclase de UITabBarController es exactamente la misma y ser paciente con la selección de Clase para el Controlador de barra de tabulación en Story Boards. No está inmediatamente disponible incluso después de la construcción.

https://devforums.apple.com/thread/165384?tstart=0

https://devforums.apple.com/thread/166544?tstart=0

Hay una serie de ejemplos y sugerencias en los hilos anteriores relacionados con los cambios de orientación de la interfaz de soporte en iOS6, los dos hilos relacionados con problemas con las vistas del centro de juegos, pero deberían ser suficientes para comenzar.

También debe consultar las notas de la versión de iOS6 en UIKit. Desafortunadamente, no puedo darle un enlace directo porque soy nuevo.

Evitando publicar código aquí debido a NDA

Espero que ayude