2012-10-08 33 views
6

desde iOS6 tengo grandes problemas con la rotación. Implementé todos los nuevos métodos de rotación (shouldAutorotate, preferredInterfaceOrientationForPresentation, supportedInterfaceOrientation), pero todas las vistas siguen girando. Lo curioso es que las vistas mantienen sus tamaños y el resto de la ventana (en horizontal) es negra.ios 6 La aplicación está girando, incluso con shouldAutorotate: NO

Esa es la forma en que lo implemento, ¿hay algo mal?

#pragma mark - 
#pragma mark - InterfaceOrientation iOS 5 
//Deprecated in iOS 6 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

#pragma mark - 
#pragma mark - InterfaceOrientation iOS 6 

- (BOOL)shouldAutorotate{ 
    return NO; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{ 
    return UIInterfaceOrientationPortrait; 
} 

- (NSUInteger)supportedInterfaceOrientations{ 
    return UIInterfaceOrientationMaskPortraitUpsideDown; 
} 

Gracias por su ayuda gente.

+0

¿No debería ser el último 'UIInterfaceOrientationMaskPortrait'? –

+0

Está bien si gira a las dos orientaciones verticales, pero no debe girar hacia la orientación horizontal – Fry

+2

Intente cambiar el soporte de orientación predeterminado de la aplicación, es decir, en el archivo plist bajo la tecla 'Orientación de interfaz admitida' seleccione solo dos interfaces admitidas. Esto resolverá su problema :) –

Respuesta

9

me resolvió el problema al hacer una categoría para el navigationcontroller:

@implementation UINavigationController (iOS6fix) 

-(BOOL)shouldAutorotate 
{ 
    return [[self.viewControllers lastObject] shouldAutorotate]; 
} 

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

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

@end 

Gracias a todos por las respuestas!

+0

Tuve que crear una subclase de UINavigationController y utilicé object_setClass (.., ..) para configurar mi navigationController a esa clase. También implementé esos 3 métodos. Mejor marque su respuesta como la respuesta aceptada para que la gente pueda ver porque parece haber mucha confusión y problemas como resultado de este cambio – pnizzle

+0

Perfecto, ¡gracias! – Fogmeister

+0

Funcionó como un amuleto, muchas gracias ... – geekyaleks

-1
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    //Make sure your window to assgin the view controller object to rootViewController, Please don't add controller view as a sub view on window. 
    self.window.rootViewController = viewController; 
} 
0

Tuve eso también, gira aunque lo convierta en NO.

dos opciones:

  1. ir a la configuración de su proyecto y cambiar las orientaciones posibles

  2. Eliminar todos los métodos para autorotate. Incluso si están configurados en NO, rotan por mí.

0

Utilicé la siguiente categoría en UIViewController para tener el paisaje solo en iOS5 y 6. Tal vez ayuda a alguien.

#import <UIKit/UIKit.h> 

@implementation UIViewController (iOS6fix) 

-(BOOL)shouldAutorotate 
{ 
    return YES; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskLandscape; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return UIInterfaceOrientationLandscapeLeft; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Return YES for supported orientations 
    return UIInterfaceOrientationIsLandscape(interfaceOrientation); 
} 

@end 
Cuestiones relacionadas