Estoy interesado en usar Core Animation para conducir animaciones personalizadas en mi escena OpenGL en el iPhone. Esperaba encontrar un mecanismo que te permitiera animar genéricamente un keypath de un NSObject o un método de delegado para cada tic de animación. Lo que se me ocurrió es animar una propiedad arbitraria de un CALayer y sondearlos desde OpenGL para determinar la progresión de la animación. Sin embargo, estoy convencido de que hay una mejor manera de hacerlo. ¿Cuál es la forma más limpia y segura de aprovechar este gran motor de animación?Aprovechamiento de la animación principal para la animación en OpenGL
Respuesta
Si desea animar la vista, intente leer iPhone UIView Animation Best Practice. Para la animación dentro de la vista OpenGL, es mejor usar modelos animados o código personalizado pero no Core Animation.
Esto es posible, para usar Core Animation para conducir lo que desee. ¡Estoy seguro de que también se puede usar para sonido! (Dada una pequeña subclasificación de CALayer). UIKit y Core Animation se pueden mezclar con bastante libertad, con un poco de cuidado, ya que también hay CAEAGLLayer con el que podemos jugar.
La clave aquí es - (id) presentationLayer y - (id) modelLayer para usar pure/solo OpenGL; por supuesto, incluso la jerarquía también se puede usar para su escena OpenGL. Pero, al usar CALayer para renderizar también se obtiene aún más "gratis", si esto es posible para sus circunstancias (pero también vea CATransformLayer), ¡si esto es lo que busca! =)
Sospecho que lo que realmente desea son solo las funciones de relajación utilizadas por la animación central. Estos son fáciles de encontrar con un poco de google. He aquí un ejemplo:
GLfloat bounceEaseOut(GLfloat ratio) {
if (ratio < 1.0f/2.75f) {
return 7.5625f*ratio*ratio;
} else if (ratio < 2.0f/2.75f) {
return 7.5625f*(ratio-=1.5f/2.75f)*ratio+0.75f;
} else if (ratio < 2.5f/2.75f) {
return 7.5625f*(ratio-=2.25f/2.75f)*ratio+0.9375f;
} else {
return 7.5625f*(ratio-=2.625f/2.75f)*ratio+0.984375f;
}
}
se pasa en qué punto en que sus hijos preadolescentes que son (elapsedTime/tweenDuration) y te dice qué porcentaje de la manera a través de "línea de tiempo" de la interpolación que debería ser.
Estaba tratando de hacer algo similar, actualizar una vista gl en función de su posición en su matriz durante una animación de CA. Estaba obteniendo resultados similares, animación entrecortada que no estaba sincronizada con la animación CA. Finalmente decidí dejar de usar CA y usar un motor de interpolación diferente por completo. Ahora estoy usando PRTween. Está funcionando muy bien. Estoy seguro de que hay algunas desventajas (sus animaciones se ejecutan en el hilo principal, la interfaz no es tan buena como CA, y es un poco problemático) pero mis animaciones se ejecutan sin problemas.
- 1. Animación OpenGL
- 2. Animación principal Animación de máscara CALayer
- 3. Animación de esqueleto OpenGL
- 4. Oyente de animación para la animación personalizada
- 5. Sincronizar vídeo a la animación OpenGL
- 6. Fórmula de animación principal para el movimiento
- 7. Android: dicha animación usando XML para la animación en Android
- 8. jQuery animación detectar si la animación?
- 9. La propiedad de animación CSS permanece después de la animación
- 10. Android: la animación se ve recortada por la vista principal
- 11. Android carga la animación
- 12. ¿Qué explica mejor la animación de animación CAPropertyAnimationWithKeyPath: parámetro?
- 13. No se puede tocar durante la animación (Animación de bloque)
- 14. Recargar la animación de tabla
- 15. Detectar la finalización de Animación
- 16. JqTouch - Detecta el disparador para la animación
- 17. Detener la animación en la imagen actual
- 18. personalizada para Android con la animación
- 19. Seguimiento de una animación de núcleo Animación
- 20. Bloquear la animación por defecto para startActivity
- 21. Cómo deshabilitar la animación para el código anidado en un bloque de animación UIView?
- 22. Animación explícita de NSView usando animación central
- 23. ¿Cómo se asegura de que la velocidad de la animación OpenGL sea consistente en diferentes máquinas?
- 24. Detener la animación GIF programáticamente
- 25. NSLayoutConstraint.constant que ignora la animación
- 26. cómo detener la animación central?
- 27. Animación para drawRect dibujos
- 28. jQuery .slideUp() omite la animación
- 29. Android: ¿Animación en la vista de galería?
- 30. desactivación de la animación GIF en HTML
¿Cuál es el problema con el uso de Core Animation indirectamente? Soy consciente del fuerte consejo de no mezclar Core Animation y OpenGL ON the screen, pero ¿y si el CALayer nunca se agrega a una vista? –
Quizás malinterprete algo, pero en caso de que represente su escena con OpenGL ES, no es necesario utilizar Core Animation en absoluto. Mire este ejemplo simple de Apple: http://developer.apple.com/iphone/library/samplecode/GLES2Sample/index.html Tienen UIView sin ningún CALayer. – Pavel
Estoy hablando de usar las capacidades de animación de Core Animation para animar algo en OpenGL. El CALayer que usaría no viviría en la pantalla. En cambio, estaría animado para que yo pudiera ver dónde se supone que está la animación (según el CALayer) y dibujar un objeto OpenGL en la pantalla en relación. De esta manera obtendría mucho gratis, en lugar de escribir mi propio motor de animación. –