voz una recibir qué quitar quien nombre llaman llamadas llamada llama espera eso escuchar entrante diciendo decir cuando como anunciar iphone ios cocoa-touch rotation ios6

iphone - una - iOS 6 shouldAutorotate: NO se está llamando



qué es eso de anunciar llamadas en el iphone (8)

He estado buscando en Internet una solución a esto, pero no encuentro nada. Estoy tratando de hacer que mi iOS 5 app iOS 6 sea compatible. No puedo hacer que la orientación funcione correctamente. No puedo detectar cuándo va a suceder una rotación. Aquí está el código que estoy intentando:

- (BOOL)shouldAutorotate { return NO; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait; } // pre-iOS 6 support - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { return (toInterfaceOrientation == UIInterfaceOrientationPortrait); }

El nuevo método supportedInterfaceOrientation: se llama muy bien. El método shouldAutorotate, sin embargo, no se activará. Necesito hacer un intercambio de imágenes al rotar, pero no puedo obtener ninguna indicación de que vaya a ocurrir una rotación.

Gracias por adelantado.


Así es como lo haría

si desea verificar cuál es la orientación actual, agregue esta línea a su archivo viewconrtoller.m

#define isPortrait [[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationPortrait || [[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationPortraitUpsideDown

luego, donde quiera verificar la orientación, escriba las condiciones como a continuación

- (void)viewDidLoad { if(isPortrait) { //portrait mode.... NSLog(@"its in IsPotraitMode"); } else { //landscape mode.... NSLog(@"its in IsLandscapeMode"); } }


Cuando uso UINavigationController como base para una aplicación, utilizo la siguiente subclase para darme la flexibilidad de permitir que el controlador de vista hijo más alto decida sobre la rotación.

@interface RotationAwareNavigationController : UINavigationController @end @implementation RotationAwareNavigationController -(NSUInteger)supportedInterfaceOrientations { UIViewController *top = self.topViewController; return top.supportedInterfaceOrientations; } -(BOOL)shouldAutorotate { UIViewController *top = self.topViewController; return [top shouldAutorotate]; } @end


Ese método no es la forma correcta de determinar eso. El método correcto es willRotateToInterfaceOrientation:duration:

El método de rotación debe orientarse (en lugar de shouldAutorotate) está en desuso y ya no se llamará a partir de iOS 6, pero no fue diseñado para ser utilizado de la misma manera que lo estaba usando.

EDITAR Respuesta a votos abajo repetidos. Explique por qué utilizar el método que indiqué no es una indicación (por citar OP) de que está a punto de producirse una rotación. El contenido de la pregunta y el título no coinciden.


Estoy usando iOS 7 pero creo que mi caso puede ser útil para otros.

Tengo una jerarquía de controlador de vista profunda enraizada con UITabBarController. El único lugar donde se garantiza que se llamará a Authorotate está dentro del UITabBarController. Así que simplemente subclasifico UITabBarController y pongo mi lógica de control de rotación dentro de mi método shouldAutorotate.


Parece que en iOS 6 el controlador de navegación de contenedores no consulta los controladores de vista infantil al rotar:

en iOS 6 notas de la versión :

Ahora, los contenedores iOS (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 idioma del iPad y UIInterfaceOrientationMaskAllButUpsideDown para el idioma del iPhone.

Este comportamiento es fácil de probar. Lo que hice fue usar el mismo controlador de vista personalizada

  1. primer caso como controlador de vista principal
  2. segundo caso como hijo de un UIPageViewController

En el primer caso, todo se decide en el controlador de navegación personalizado mediante la combinación de shouldAutorotate y supportedInterfaceOrientations dado que supportedInterfaceOrientations coincide con las orientaciones admitidas de la aplicación.

En el segundo caso, incluso si el UIPageViewController llama a las Orientaciones de Interfaz supportedInterfaceOrientations del controlador de vista personalizado, el valor de retorno no se tiene en cuenta. Funciona si los dos métodos se sobrescriben en una subclase del UIPageViewController. No estoy seguro de los efectos secundarios de eso, ya que no se supone que esta clase deba ser subclasificada.


Si su viewController es un niño viewController en un UINavigationController entonces puede hacer lo siguiente:

  • Subclase UINavigationController
  • la anulación shouldAutoRotate en su subclase
  • envíe su topViewController este mensaje cuando se llame a este método

// Este método está dentro de tu subclase UINavigationController

- (BOOL)shouldAutorotate { if([self.topViewController respondsToSelector:@selector(shouldAutorotate)]) { return [self.topViewController shouldAutorotate]; } return NO; }

  • Ahora su viewControllers responderá respectivamente a este método.
  • Tenga en cuenta que puede hacer lo mismo con otros métodos de orinetaion

También recibí el siguiente error cuando se inicia su aplicación.

"Se espera que las ventanas de aplicaciones tengan un controlador de vista raíz al final del lanzamiento de la aplicación"

Estoy usando un UISplitViewController * splitViewController

Si es así, la forma de solucionarlo es haciendo el siguiente cambio en el archivo AppDelegate.m:

Reemplazar

[self.window addSubview:[splitViewController view]];

Con

[self.window setRootViewController:splitViewController];

Después de esto, se shouldAutoRotate llamar a shouldAutoRotate y funciona correctamente.


Vea si está recibiendo el siguiente error cuando se inicia su aplicación.

Se espera que las ventanas de aplicaciones tengan un controlador de vista raíz al final del lanzamiento de la aplicación

Si es así, la forma de solucionarlo es realizando el siguiente cambio en el archivo AppDelegate.m (aunque parece que hay varias respuestas sobre cómo solucionarlo):

// Replace [self.window addSubview:[navigationController view]]; //OLD // With [self.window setRootViewController:navigationController]; //NEW

Después de esto shouldAutoRotate debe llamarse correctamente.