Rotación no anima para ver después de tabViewController setSelectedIndex

La animation de rotation se produce para la barra de estado (que tiene el reloj y el ícono de la batería), pero la vista en sí solo cambia de tamaño, no hace la animation de cambio de página. En el gif (a continuación), hice algunas capturas de pantalla de la animation de rotation en camera lenta. Puede ver el ícono del reloj y la batería rotar en la vista, a pesar de que el contenido simplemente se escala.

http://imgur.com/gallery/Q3OXCIH

Encontré algunas publicaciones similares, pero no muy parecidas: Rotación de dispositivo iOS Instant Snap en lugar de animation

iOS 9 Orientación La animation de rotation automática no funciona, pero siempre está en el hilo principal

Esto es un tanto repetible: al principio, la rotation se produce correctamente, pero después de cambiar programáticamente el índice del controller de vista de pestaña, puede activarse. Después de que se activa, la animation de rotation no se produce para la vista hasta después de restablecer la aplicación.

Código donde cambio el controller de vista de pestaña y luego lo cambio de nuevo:

[appDelegate.tabBarController setSelectedIndex:0]; ...code to operate on the code at index 0... [appDelegate.tabBarController setSelectedIndex:2]; 

Para enfatizar: anima la rotation correctamente cuando ejecuto la aplicación por primera vez. Se comporta igual en el simulador y en el hardware. IOS9. Xcode 7.1.1.

¿Alguien sabe por qué el contenido de un viewcontroller dejará de animar durante la rotation?

editar-


Para responder a las preguntas de fragilecat:

1) Estoy configurado para usar las funciones de rotation, como se describe en https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/#//apple_ref/occ/clm/UIViewController/attemptRotationToDeviceOrientation

He implementado shouldAutorotateToInterfaceOrientation y shouldAutorotate y supportedInterfaceOrientations. El supportInterfaceOrientations recibe una llamada una vez, cuando se carga el viewcontroller. shouldAutorotateToInterfaceOrientation y shouldAutorotate aparentemente nunca se llaman.

2) Estoy recibiendo posts de cambio de tamaño a través de viewWillTransitionToSize: esto es ios9 por lo que no hay ningún post de rotation. willTransitionToTraitCollection aparentemente nunca se llama, aunque se anula. Estoy llamando al súper para ambos.

3) No estoy usando viewWillLayoutSubviews () o viewDidLayoutSubviews (). Solo estoy anulando viewDidLoad y viewWillAppear. Estos no afectan la rotation.

4) No estoy cambiando dinámicamente los methods de rotation.

Lo que sí noté es que la rotation funciona al principio, pero luego falla (no gira pero solo escala), después de cambiar el tabViewViewController selectedViewController mediante progtwigción después de que el uso hace clic en "ok" a una vista de alerta. Aún no he descubierto por qué, pero es repetible después de ese evento.

Secuencia del error:

  1. Funciona bien, gira bien.
  2. El usuario accede "ok" a una alerta
  3. Llamo programáticamente a [tabBarViewController setSelectedIndex: 0]
  4. Llamo a algunas funciones en el control de vista en el índice 0.
  5. Llamo programáticamente a [tabBarViewController setSelectedIndex: 2] (vuelve al original)
  6. la rotation ahora no ocurre de manera confiable

¿Alguien sabe por qué el contenido de un viewcontroller dejará de animar durante la rotation?

  1. Los methods de rotation del controller child view se configuran incorrectamente.
  2. La vista de su hijo no recibe posts de rotation.
  3. Tiene un código personalizado en los methods de layout del controller de vista.
  4. Su código está alterando dinámicamente los methods de rotation / layout / animation.

Estoy buscando dirección sobre qué tipo de errores pueden producir este tipo de error.

Esto es algo difícil de responder sin ver tu código, pero estos son los pasos que daría para solucionar este problema.

  1. Confirme que los controles de visualización de su hijo estén configurados correctamente para la rotation.

Métodos de rotation de UIViewController

  1. Confirme que los controles de la vista de su hijo reciban los siguientes posts para que pueda descartar esto como el problema ya que así se maneja la rotation en iOS 9.

    func willTransitionToTraitCollection (_ newCollection: UITraitCollection, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator)

    func viewWillTransitionToSize (_ size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator)

Si está anulando estos methods, donde debería asegurarse de llamar a la versión de super, consulte UIContentContainer para más detalles.

  1. Comente cualquier código personalizado que pueda tener en la implementación de viewWillLayoutSubviews() de sus controlleres de vista. También puedes verificar tus frameworks entre viewWillLayoutSubviews() y viewDidLayoutSubviews() .

EDITAR

Necesita ejecutar el cambio de tabulación en el hilo principal. Si estoy en lo cierto, ¿estás usando el delegado de UIAlertView? ¡No creo que tu en el hilo principal haya hecho su llamada!

  dispatch_async(dispatch_get_main_queue(), ^{ [appDelegate.tabBarController setSelectedIndex:0]; });