2012-09-13 14 views
25

Cómo utilizar los siguientes métodos para apoyar orientación interfaz en IOS 6.0:orientación Interface 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.

+1

Puede ver una solución para admitir la rotación de iOS 6 y iOS 5 aquí: http://stackoverflow.com/questions/12396545/how-to-deal-with-iphone-5-screen-size/12397738#12397738 –

+1

Ver mi solución aquí: http: //stackoverflow.com/questions/12662240/how-to-make-app-fully-working-correctly-for-autorotation-in-ios-6/12662433#12662433 – Carina

+0

Gracias por preguntar esto! He estado tratando de resolver esto por un tiempo, porque las cosas no han funcionado como deberían. – Justin

Respuesta

1

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

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

Hay una serie de ejemplos y sugerencias en las discusiones anteriores relacionadas con el apoyo a los cambios de orientación de interfaz de iOS 6, los dos hilos relacionados con problemas con vistas al centro de juego, pero debería ser suficiente para comienza.

También debe consultar las notas de la versión iOS6 bajo UIKit, desafortunadamente no puedo darle un enlace directo ya que soy nuevo.

Evitar el código de anuncio aquí debido a NDA

Espero que ayude

11

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

+1

y no olvide (como lo hice) que tiene que hacer esto para el despliegue de iPhone y iPad ... –

+0

Tengo en los ajustes del proyecto Xcode Portatit y LandScape (izquierda y derecha), pero me doy cuenta de que hay un parir de orientación que se ejecuta: UIDeviceOrientationFaceDown y UIDeviceOrientationFaceUp, ¿sabes por qué? –

19

método en desuso 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 equivalentes de esta iOS 5 en desuso método anterior:

- (BOOL) shouldAutorotate 
{ 
    return YES; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskLandscapeRight; 
} 

Espero que esto ayude.


[editar # 1: Añadido mi UIViewController que se inicia con éxito en el modo de retrato en XCode 4.5 en el iPhone 6.0 Simulador]

#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 horizontal única aplicación los cuales soporta iOS 5 y iOS 6]

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 

    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight) || (interfaceOrientation == UIInterfaceOrientationLandscapeLeft); 
} 

- (BOOL)shouldAutorotate { 

    return YES; 
} 

- (NSUInteger)supportedInterfaceOrientations { 

    return UIInterfaceOrientationMaskLandscape; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { 

    return UIInterfaceOrientationLandscapeLeft; 
} 
+1

Se reemplazó con esto pero no afecta la orientación rota. Nada ha cambiado. – VagueExplanation

+0

mismo aquí. la aplicación ipad debe ejecutar el paisaje, pero se ejecuta retrato ahora –

+0

Compruebe mi edición # 1. Este es el código fuente de mi UIViewController que hice para ejecutar solo en modo vertical. Puede cambiar UIInterfaceOrientations para obtener el comportamiento deseado. Como quería que mi UIViewController se mostrara en modo vertical, también seleccioné Portrait como orientación preferida para mi UIViewController desde Interface Builder. – uerceg

7

Mi aplicación tiene una instancia de un UIN personalizada La subclase avigationController, que presenta varios controladores de vista, todo en modo retrato solamente, excepto cuando se reproduce un video, en cuyo caso quiero permitir adicionalmente ambas orientaciones de 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, I #import 'ed <MediaPlayer/MediaPlayer.h>.

Entonces implementado 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; 
} 
+0

En realidad, la primera condición en ambos ' if' blocks es redundante (si el controlador de vista modal es nil, la prueba 'isKindOfClass' debería devolver 0, es decir' NO'). La versión actual es más detallada, ¿pero quizás más fácil de entender? –

+0

Este era exactamente el problema que estaba tratando de resolver, pero parece que la configuración en Xcode -> Objetivo -> Resumen anula todo. Incluso si devuelvo NO en la función shouldAutorotate, sigue girando. ¿Algunas ideas? –

+0

¿Cuál es su configuración? Funciona para mí ... –

2

código de NicolasMiari trabajado 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.

Cuestiones relacionadas