new - ¿Animación de una etapa vs. dos etapas para aplicaciones de iPhone?
latest ipad (11)
Acabo de tener el mismo problema. En mi caso fue un error tonto que estoy poniendo aquí en caso de que alguien más caiga en el mismo problema.
En mi aplicación con pestañas, elimino uno de los ViewControllers originales y agregué uno nuevo con Storyboard para crear una sección de "Configuración".
Este nuevo VC tenía que ser un VC de vista de tabla e incluso yo lo diseñé, compilé y ejecuté sin problemas, cuando cambié la orientación de la aplicación, seguí recibiendo este error de "Uso de animación de rotación en dos etapas".
Mi problema fue que olvidé cambiar en la interfaz del archivo .h original "UIViewController" para "UITableViewController".
Una vez hecho esto, cambié la credencial de identidad del Guión gráfico de la clase del valor general a mi SettingsViewController y ese fue el final de la misma.
Espero que pueda ayudar a alguien más. Me tomó un tiempo llegar al fondo de esto.
Aclamaciones,
¿Qué son las animaciones de estado único y de dos etapas para rotar una ventana de iPhone?
Este es el mensaje de "error" que recibí en la consola del depurador (nada se bloquea):
Using two-stage rotation animation. To use the smoother single-stage animation, this application must remove two-stage method implementations.
Estaba trabajando en el libro "Desarrollo de iPhone para principiantes: Explorando el iPhone SDK" de Apress (Dave Mark, Jeff LaMarche) en el Proyecto de intercambio.
Cambié de willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:
method to willAnimateRotationToInterfaceOrientation:duration:
método y advertencia desaparecidos.
Gracias.
Es necesario agregar UIImagePickerController
como una subvista para resolver este error
[self.view addSubview:picker.view];
[self presentModalViewController:picker animated:NO];
He eliminado de la lista "Orientaciones de interfaz admitidas" y la advertencia desaparece.
He encontrado que el culpable en mi caso es el UIImagePickerController (tampoco anulo ninguna animación de rotación):
[self presentModalViewController: imagePicker animated: YES];
Reemplazar imagePicker con un UIViewController genérico no genera ninguna advertencia.
He tenido este problema después de crear un controlador de barra de herramientas sin controladores de visualización en su interior (sin pestañas), esta advertencia desapareció una vez que le conecté al menos un controlador de visualización.
La respuesta de @plumiscles no me funcionó del todo: no había ningún elemento llamado ''Orientaciones de interfaz admitidas'', probablemente porque es un proyecto antiguo. Pero puede obtener el mismo efecto editando el archivo .plist directamente y agregando esto:
<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationPortrait</string>
La respuesta de Ed Marty es la correcta. La razón por la que ocurrirá si no está anulando ninguna de las animaciones de rotación es probablemente que responda "SÍ" a shouldAutorotate ... para alguna vista. Si no implementa la rotación en absoluto, entonces simplemente no debe anular el método shouldAutorotate ... Si anula ese método, simplemente anule también el método de rotación de un solo paso y páselo al super.
No estaba sobrepasando ninguna de esas funciones de dos pasos, pero estaba llamando a mi propia función cuando recibí las notificaciones de Cambio de orientationChanged
, y tenía esta línea de código en ella. Al comentarlo, eliminó la advertencia y permitió que la rotación automática funcionara correctamente. La rotación automática aún funcionó con esta línea de código hasta iOS 4.2, luego se rompió por completo. Pasé mucho tiempo buscando por qué el autoRotate incorporado dejó de funcionar en 4.2. Tal vez esto ayudará a alguien más.
Comenté esta línea para que funcione:
[[UIApplication sharedApplication] setStatusBarOrientation:currentOrientation animated:YES];
Si está usando iOS 4 y está recibiendo esta advertencia, encontré una manera de deshacerme de él. En su info.plist, hay un elemento llamado "Orientaciones de interfaz admitidas". Seleccione qué orientaciones admite su aplicación y las advertencias de dos etapas desaparecerán cuando aparezca el imagePicker.
Todo se explica en la referencia de clase UIViewController . Especialmente echa un vistazo a la sección de rotación de vista en la parte superior.
De la referencia:
Manejo de rotaciones de vista
De forma predeterminada, la clase UIViewController muestra las vistas solo en modo vertical. Para admitir orientaciones adicionales, debe anular el método
shouldAutorotateToInterfaceOrientation:
y devolver SÍ para cualquier orientación que admita la subclase. Si las propiedades de tamaño automático de sus vistas están configuradas correctamente, eso es todo lo que tiene que hacer. Sin embargo, la clase UIViewController proporciona enlaces adicionales para que pueda implementar comportamientos adicionales según sea necesario.Para desactivar temporalmente las funciones que no son necesarias o que podrían causar problemas durante el cambio de orientación, puede anular el
willRotateToInterfaceOrientation:duration:
y realizar las acciones necesarias allí. A continuación, puede anular el métododidRotateFromInterfaceOrientation:
y utilizarlo para volver a habilitar esas funciones una vez que se complete el cambio de orientación.Si desea realizar animaciones personalizadas durante un cambio de orientación, puede hacerlo de dos maneras. Los cambios de orientación solían ocurrir en dos pasos, con notificaciones que se producen en los puntos inicial, medio y final de la rotación. Sin embargo, en iPhone OS 3.0, se agregó soporte para realizar cambios de orientación en un solo paso. El uso de un cambio de orientación de un paso tiende a ser más rápido que el proceso anterior de dos pasos y generalmente se recomienda para cualquier código nuevo.
Para agregar animaciones para un cambio de orientación de un solo paso, anule el
willAnimateRotationToInterfaceOrientation:duration:
y realice las animaciones allí. Para usar el método anterior de dos pasos, anule uno o ambos dewillAnimateFirstHalfOfRotationToInterfaceOrientation:duration:
ywillAnimateSecondHalfOfRotationFromInterfaceOrientation:duration:
métodos para configurar sus animaciones antes de cada paso. Debe elegir solo una técnica y anular solo los métodos asociados con esa técnica. Si reemplaza cualquiera de los métodos asociados con la técnica de dos pasos, el controlador de vista usa esa técnica de manera predeterminada.