2009-10-04 7 views
13

estoy volviendo YES en función de mi punto de vista del controlador de shouldAutorotateToInterfaceOrientation, y puedo ver el uso de puntos de corte que está siendo devuelto YES, sin embargo, no se está llamando el método willRotateToInterfaceOrientation, y tampoco es cualquier otro método de rotación. Parece que después de regresar YES no pasa nada!no willRotateToInterfaceOrientation ser llamado

¿Alguna idea?

Mike

Respuesta

19

Es vistas ViewController una vista secundaria de algunos otros eso controlador de vista raíz no un controlador de navegación? si es así, la llamada no se propaga al controlador de subvistas, por lo que esa podría ser la razón por la cual su vista no está girando.

+0

Estoy tratando de manejar las llamadas en un controlador de vista de tabla que es la raíz de un controlador de navegación, que a su vez es una pestaña en un controlador de pestañas. ¿Es ese el lugar correcto para detectarlo? –

18

Tengo un problema similar y vi la respuesta de Daniel, pero no puedo encontrar ninguna confirmación de esto en la documentación del desarrollador. No es que no crea la respuesta, pero realmente no entiendo por qué la llamada de orientación no se propaga.

Alguien me dio un truco que funciona usando algo como esto:

[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(detectOrientation) name:@"UIDeviceOrientationDidChangeNotification" object:nil]; 
+0

Pregunte a la última parte como una nueva pregunta, porque no pertenece a una respuesta. Nadie podrá ayudarte aquí. –

+3

Encuentro mi pregunta muy similar a la del OP para hacer una nueva pregunta, el truco funciona y resolvió mi problema. Me preguntaba por curiosidad más que por necesidad. Gracias sin embargo. – Deratrius

+0

Todo lo que necesita hacer es volver a vincular esta pregunta y respuesta en su nueva pregunta, luego haga su pregunta adicional. La gente podrá leer el contexto de esta pregunta para responder a la tuya, y apuesto a que obtendrás una respuesta decente de alguien. Stack Overflow no es un foro de discusión tradicional, y las preguntas formuladas en las respuestas tienden a eliminarse para mantener el sitio limpio. –

4

Una cosa que buscar es que si tuviera encontrado UIPopoverController llamada en [UINavigationController viewDidAppear], entonces willRotateToInterfaceOrientation y didRotateFromInterfaceOrientation no son llamados. Parece que UIPopoverController siendo modal bloquea las llamadas al método de rotación.

2

Sí, yo también. Ok, no se llamará en un controlador de subvista - tiene que pasarlo. Puede lidiar con eso Y la idea de notificación funciona bien excepto que solo se obtiene "did ..." no "will ..." (afaik) y de todos modos es una solución desordenada a un problema que no debería estar allí.

Mi error fue llamar al [super loadView] en mi loadView. Not supposed to do that. Cuando eliminé [super loadView] y asigné la vista yo mismo willRotateToInterfaceOrientation comenzó a funcionar.

Lo que es realmente raro es que el [super loadView] fue en el sub-viewcontroller y el evento no estaba alcanzando incluso el de arriba ... documentación

0

de Apple

A la hora del lanzamiento, aplicaciones siempre debe configurar su interfaz en una orientación vertical. Después de la aplicación: el método didFinishLaunchingWithOptions: regresa, la aplicación utiliza el mecanismo de rotación del controlador de vista descrito anteriormente para rotar las vistas a la orientación adecuada antes de mostrar la ventana.

Si está utilizando un TabBarViewController, tenga cuidado de configurar la vista seleccionada en el método application:didFinishLaunchingWithOptions:.

2

Si no está recibiendo devoluciones de llamada en willAutoRotateToInterfaceOrientation en cualquier controlador de vista, agregue el controlador de vista como controlador de vista secundaria del controlador de vista raíz.

Por ejemplo; diga self.viewController es su controlador de vista raíz y childViewController es el controlador de visualización en el que desea obtener devoluciones de llamada de autorrotación, agregue la siguiente línea de código;

[self.viewController addChildViewController:childViewController];

En realidad, añadiendo que el controlador de vista del niño a cualquier controlador de vista, que obtiene de rotación rellamadas trabajarán también.

Espero que ayude.

Cuestiones relacionadas