xcode orientation ios6 screen-orientation

xcode - shouldAutorotateToInterfaceOrientation no funciona en iOS 6



ios6 screen-orientation (6)

En iOS 6 shouldAutorotateToInterfaceOrientation no funciona, pero funciona bien en iOS 5.0 o 5.1 .

¿Qué debo cambiar en iOS 6 ? Aquí está mi código

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { if([[[SampleApplicationAppDelegate instance].callInfoDictionary valueForKey:IS_CHAT] isEqualToString:NO_RESPONSE]) { int nAngle = 0; BOOL bRet = NO; switch (interfaceOrientation) { case UIInterfaceOrientationPortrait: nAngle = 90; bRet = YES; NSLog(@".......Preview = %f %f",_previewCamera.frame.size.width,_previewCamera.frame.size.height); _previewCamera.transform = CGAffineTransformMakeRotation(M_PI*1.5); NSLog(@"Preview = %f %f",_previewCamera.frame.size.width,_previewCamera.frame.size.height); break; case UIInterfaceOrientationPortraitUpsideDown: nAngle = 270; bRet = YES; _previewCamera.transform = CGAffineTransformMakeRotation(M_PI_2); break; case UIInterfaceOrientationLandscapeLeft: nAngle = 0; bRet = YES; //_previewCamera.transform = CGAffineTransformMakeRotation(M_PI*1.5); break; case UIInterfaceOrientationLandscapeRight: nAngle = 180; bRet = YES; //_previewCamera.transform = CGAffineTransformMakeRotation(M_PI_2); break; default: break; } return bRet; } if(interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) return YES; return NO;

}

cuando busco este problema de orientación, encontré todo esto

1 2

pero nada me funciona :( Por favor ayuda .....


Esto se debe a que Apple ha dejado de utilizar el método owdautorate de ios6. Use estos métodos en su lugar.

- (BOOL)shouldAutorotate NS_AVAILABLE_IOS(6_0); - (NSUInteger)supportedInterfaceOrientations NS_AVAILABLE_IOS(6_0); // Returns interface orientation masks. - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation NS_AVAILABLE_IOS(6_0);


La forma en que resolvió este problema fue reemplazar la siguiente línea cuando mi aplicación se inicia en la clase de delegado

window addSubview: navigationController.view

con

window.rootViewController = navigationController

Después de hacer este cambio, mi aplicación comenzó a manejar rotaciones de pantalla


Por favor, intente con este, será útil para usted.

escribe el código en tu clase viewcontroller

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

Luego, en appdelegate busque esta línea [window addSubview: viewController.view] y reemplácela con window.rootViewController = viewController;

¡Salud! Funcionará. Su solución simple para iOS 6


Resolví este problema simplemente use esto

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { if(![AppDelegate instance]) return (interfaceOrientation == UIInterfaceOrientationPortrait) || (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown); if([[[AppDelegate instance].callInfoDictionary valueForKey:IS_CHAT] isEqualToString:NO_RESPONSE]) { int nAngle = 0; BOOL bRet = NO; switch (interfaceOrientation) { case UIInterfaceOrientationPortrait: { nAngle = 90; bRet = YES; NSLog(@".......Preview = %f %f",_previewCamera.frame.size.width,_previewCamera.frame.size.height); NSComparisonResult order = [[UIDevice currentDevice].systemVersion compare: @"6.0" options: NSNumericSearch]; if (order == NSOrderedSame || order == NSOrderedDescending) { // OS version >= 6.0 NSLog(@"ami iOS 6 er device"); _previewCamera.transform = CGAffineTransformMakeRotation(M_PI_2); } else { // OS version < 6.0 _previewCamera.transform = CGAffineTransformMakeRotation(M_PI*1.5); } NSLog(@"Preview = %f %f",_previewCamera.frame.size.width,_previewCamera.frame.size.height); NSLog(@"-->%s %d",__FUNCTION__,__LINE__); break; } case UIInterfaceOrientationPortraitUpsideDown: { nAngle = 270; bRet = YES; NSComparisonResult order = [[UIDevice currentDevice].systemVersion compare: @"6.0" options: NSNumericSearch]; if (order == NSOrderedSame || order == NSOrderedDescending) { // OS version >= 6.0 NSLog(@"ami iOS 6 er device"); _previewCamera.transform = CGAffineTransformMakeRotation(M_PI*1.5); } else { // OS version < 6.0 _previewCamera.transform = CGAffineTransformMakeRotation(M_PI_2); } break; } case UIInterfaceOrientationLandscapeLeft: nAngle = 0; bRet = YES; //_previewCamera.transform = CGAffineTransformMakeRotation(M_PI*1.5); break; case UIInterfaceOrientationLandscapeRight: nAngle = 180; bRet = YES; //_previewCamera.transform = CGAffineTransformMakeRotation(M_PI_2); break; default: break; } return bRet; } if(interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) return YES; return NO; }


esto funcionó para mí

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return [super shouldAutorotateToInterfaceOrientation:interfaceOrientation]; } - (BOOL)shouldAutorotate { UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; if (orientation == UIInterfaceOrientationPortrait) { // your code for portrait mode } return YES; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskPortraitUpsideDown; }


EDITAR: Esto está sucediendo porque Apple ha cambiado la forma de administrar la Orientación de UIViewController . En iOS6 la orientación se maneja de manera diferente. En iOS6, el método shouldAutorotateToInterfaceOrientation está en desuso. Los controladores de vista (como UINavigationController ) no consultan a sus hijos para determinar si deben autorrotar. De forma predeterminada, las orientaciones de interfaz admitidas por una aplicación y un controlador de vista están configuradas en UIInterfaceOrientationMaskAll para el idiom del iPad y UIInterfaceOrientationMaskAllButUpsideDown para el idioma del iPhone.

Si desea cambiar una vista específica a la orientación deseada, debe hacer una especie de subclase o categoría y anular los métodos de autorrotación para devolver la orientación deseada.

Coloque este código en su controlador de vista raíz. Esto ayudará al UIViewController a determinar su orientación.

//RotationIn_IOS6 is a Category for overriding the default orientation. @implementation UINavigationController (RotationIn_IOS6) -(BOOL)shouldAutorotate { return [[self.viewControllers lastObject] shouldAutorotate]; } -(NSUInteger)supportedInterfaceOrientations { return [[self.viewControllers lastObject] supportedInterfaceOrientations]; } - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation]; } @end

Ahora necesita implementar los métodos a continuación (introducidos en iOS6) en viewController para orientación

- (BOOL)shouldAutorotate { //returns true if want to allow orientation change return TRUE; } - (NSUInteger)supportedInterfaceOrientations { //decide number of origination tob supported by Viewcontroller. return UIInterfaceOrientationMaskAll; } - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { //from here you Should try to Preferred orientation for ViewController }

Y coloque su código dentro del siguiente método. Siempre que se cambie la orientación del dispositivo, se llamará este método:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation duration:(NSTimeInterval)duration { if([[[SampleApplicationAppDelegate instance].callInfoDictionary valueForKey:IS_CHAT] isEqualToString:NO_RESPONSE]) { int nAngle = 0; BOOL bRet = NO; switch (interfaceOrientation) { case UIInterfaceOrientationPortrait: nAngle = 90; bRet = YES; NSLog(@".......Preview = %f %f",_previewCamera.frame.size.width,_previewCamera.frame.size.height); _previewCamera.transform = CGAffineTransformMakeRotation(M_PI*1.5); NSLog(@"Preview = %f %f",_previewCamera.frame.size.width,_previewCamera.frame.size.height); break; case UIInterfaceOrientationPortraitUpsideDown: nAngle = 270; bRet = YES; _previewCamera.transform = CGAffineTransformMakeRotation(M_PI_2); break; case UIInterfaceOrientationLandscapeLeft: nAngle = 0; bRet = YES; //_previewCamera.transform = CGAffineTransformMakeRotation(M_PI*1.5); break; case UIInterfaceOrientationLandscapeRight: nAngle = 180; bRet = YES; //_previewCamera.transform = CGAffineTransformMakeRotation(M_PI_2); break; default: break; } }

Editar: compruebe su ventana, debe agregar el controlador en la ventana como rootViewController lugar de agregar la rootViewController como se rootViewController a continuación

self.window.rootViewController=viewController;

Para obtener más información, here un artículo sobre iOS6.0 Beta 2 OTA.

Espero que esto haya sido útil.