2010-01-12 13 views
16

¿Qué son las animaciones de estado único y de dos etapas para rotar una ventana de iPhone?Animación de una sola etapa frente a dos etapas para aplicaciones de iPhone?

Este es el mensaje de "error" me meto 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. 

yo estaba trabajando a través del libro "A partir iPhone Desarrollo: Explorando el iPhone SDK" por Apress (Dave Marcos , Jeff LaMarche) en el Proyecto Swap.

Respuesta

15

Todo se explica en el UIViewController Class Reference. Especialmente echa un vistazo a la sección Vista Rotación cerca de la parte superior.

De la referencia:

Manipulación Ver Rotaciones

Por defecto, los puntos de vista de clase UIViewController muestra en el modo de retrato solamente. Para apoyar orientaciones adicionales, debe invalidar el método shouldAutorotateToInterfaceOrientation: y sí volver para cualquier orientaciones subclase apoya. Si las propiedades de ajuste automático de sus vistas están configuradas correctamente, ese puede ser todo lo que tiene que hacer. Sin embargo, la clase UIViewController proporciona ganchos adicionales para que implemente comportamientos adicionales según sea necesario.

Para desactivar temporalmente las características que no son necesarios, o de lo contrario podría causar problemas durante el cambio de orientación , puede anular el método willRotateToInterfaceOrientation:duration: y llevar a cabo las acciones necesarias allí. A continuación, puede anular el método didRotateFromInterfaceOrientation: y utilizarlo para volver a habilitar esas características una vez que la orientación cambie haya finalizado.

Si desea realizar animaciones personalizados durante un cambio de orientación , puede hacerlo en una de dos maneras . Los cambios de orientación utilizados para ocurren en dos pasos, con las notificaciones que ocurren al comienzo, en el centro, y puntos finales de la rotación. Sin embargo, en iPhone OS 3.0, se agregó compatibilidad con para realizar cambios de orientación en un solo paso. El cambio de orientación de un paso en tiende a ser más rápido que en el proceso anterior de dos pasos y es generalmente recomendado para cualquier código nuevo .

Para agregar animaciones para un cambio de un solo paso orientación, reemplazar el método willAnimateRotationToInterfaceOrientation:duration: y realizar sus animaciones allí. Para utilizar el viejo método de dos pasos , reemplazar uno o ambos de los willAnimateFirstHalfOfRotationToInterfaceOrientation:duration: y willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration: métodos para configurar las animaciones antes de cada paso.Debe elegir solo una técnica y anular solo los métodos asociados con esa técnica . Si anula el método asociado con la técnica de dos pasos , el controlador de vista usa esa técnica de manera predeterminada.

+2

Lamentablemente, esto no ayuda. No estoy usando ninguna de las funciones de orientación y este error aún ocurre. Parece ser un error en OS4. – typeoneerror

+0

Esta respuesta es correcta para algunas situaciones, pero no para otras. Ciertamente, esa sección en documentos NO explica el error por completo: hay errores específicos en UIImagePickerController/presentModalController de Apple que están desencadenando este mensaje de error (y que NO DEBERÍA desencadenarlo). Todavía estoy tratando de encontrar una solución alternativa :(. – Adam

+0

@ Adam: http://stackoverflow.com/questions/2878947/getting-using-two-stage-rotation-animation-warning-with-uiimagepickercontroller – geon

3

He cambiado de willAnimateFirstHalfOfRotationToInterfaceOrientation:duration: a willAnimateRotationToInterfaceOrientation:duration: método y aviso ido.

Gracias.

1

La respuesta de Ed Marty es la correcta. La razón por la que sucederá si no está anulando ninguna de las animaciones de rotación probablemente sea 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 súper.

3

he encontrado el culpable en mi caso al ser el UIImagePickerController (también no anulan cualquier animación de rotación):

[auto presentModalViewController: imagePicker animado: YES];

Reemplazando imagePicker con un UIViewController genérico no genera ninguna advertencia.

+0

Tengo el mismo problema con UIImagePickerController ¿Hay alguna otra forma de eliminar el error sin cambiarlo a UIViewController? – karim

+1

¿Cómo se especificaron los parámetros del UIImagePickerController utilizando un UIViewController? – Joze

1

Si está utilizando iOS 4 y recibe esta advertencia, encontré la manera de deshacerse de ella. En su info.plist, hay un elemento llamado "Orientaciones de interfaz compatibles". Seleccione las orientaciones que admita su aplicación y las advertencias de dos etapas desaparecerán al abrir el imagePicker.

1

@plumiscles la respuesta no funcionó para mí, no había ningún elemento llamado 'Orientaciones de interfaz compatibles', probablemente b/c es un proyecto antiguo. Sin embargo, se puede obtener el mismo efecto mediante la edición del archivo .Plist directamente y añadiendo esto:

<key>UIInterfaceOrientation</key> 
    <string>UIInterfaceOrientationPortrait</string> 
0

no estaba montando sobre cualquiera de las funciones de dos pasos, pero yo estaba llamando a mi propia función cuando recibí orientationChanged notificaciones, y tenía esta línea de código. Comentarlo eliminó la advertencia y permitió que la rotación automática funcionara correctamente. La rotación automática todavía funcionaba 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. Quizás esto ayudará a alguien más.

comentada esta línea para hacer que funcione:
[[UIApplication sharedApplication] setStatusBarOrientation:currentOrientation animated:YES];

1

necesidad de añadir UIImagePickerController como subvista para resolver este error

[self.view addSubview:picker.view]; 
[self presentModalViewController:picker animated:NO]; 
0

he eliminar de plist "orientaciones de interfaz soportado" fila y la advertencia desaparece

0

Acabo de tener el mismo problema. En mi caso fue un error tonto que estoy poniendo aquí en caso de que alguien más se encuentre con 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 lo diseñé, compilé y ejecuté sin problemas, cuando cambié la orientación de la aplicación seguí obteniendo el error "Uso de la animación de rotación de dos etapas".

Mi problema es que olvidé cambiar en la interfaz de archivo original .h "UIViewController" para "UITableViewController".

Una vez hecho esto, cambié en el distintivo de identidad Storyboard la clase del valor general a mi SettingsViewController y eso fue todo.

Espero que pueda ayudar a alguien más. Me tomó un tiempo llegar al fondo de esto.

Cheers,

1

que he tenido este problema después de la creación de un tabBarController sin controladores de vista en el interior (sin pestañas), esta advertencia desaparecieron una vez que unido al menos un controlador de vista a la misma.

Cuestiones relacionadas