2009-07-16 12 views
72

Estoy luchando con la conceptualización de animaciones con CALayer frente a UIView propios métodos de animación. Tirar "Core Animation" en esto y, bueno, tal vez alguien pueda articular estos conceptos desde un alto nivel para que pueda visualizar mejor lo que está sucediendo y por qué querría migrar las animaciones de UIView (con las que estoy bastante familiarizado ahora) a las animaciones de CALayer en el iPhone. Cada vista en Cocoa-Touch automáticamente obtiene una capa. Y, al parecer, puede animar uno y/o el otro?!? ¡¿Incluso mezclarlos juntos?!? ¿Pero por qué? ¿Dónde está la línea? ¿Cuál es el pro/con para cada uno?UIView animación vs CALayers

La Guía de programación básica de animación salta inmediatamente a la capa & Clases de temporización y creo que es necesario dar un paso atrás y comprender por qué existen estas piezas variadas y cómo se relacionan entre sí.

+3

Esta fue una excelente pregunta de propósito general y todas las respuestas son excelentes. Elegí a todos en este hilo. – mobibob

+0

Gran pregunta. ¿Alguien conoce las mejores prácticas para animar un CALayer de UIView?En mi ejemplo, necesito un efecto 3D, y me parece que la animación de la capa hace que el 'marco' de la UIView se desalinee con la capa (por lo que para un botón, los grifos ya no coincidirán). – Marc

Respuesta

53

Use vistas para el control y capas para los ojos dulces. Las capas no reciben eventos por lo que es más fácil usar una vista para esos casos, pero cuando quieres animar un sprite o fondos, etc., las capas tienen sentido. Los eventos pasan a través de las capas hasta la vista de respaldo para que pueda tener una representación visual bonita sin estropear sus eventos. Intenta superponer una vista que solo estás utilizando para la representación visual y tendrás que pasar los eventos tap a la vista subyacente tú mismo.

+1

Eso ayudó, gracias :) – Spanky

+0

Esta es una gran respuesta. ¡Gracias! – Warpling

9

Las transformaciones UIView son solo 2D y están restringidas a eso, las transformadas LAyer pueden ser 3D y debe usarlas si desea hacer cosas 3D, la animación UIView funcionará si cambia la transformación UIView o la transformación CALayer. Entonces, en un nivel básico, puedes hacer mucha más manipulación cuando trabajas con una capa en lugar de la vista.

24

Un UIView siempre se procesa en CALayer. Cuando usa los métodos UIView para animar una vista, está efectivamente manipulando el subyacente CALayer.

Si necesita hacer cosas simples, use los métodos UIView. Para situaciones más complejas, o si desea capas no asociadas con ninguna vista en particular, use CALayers.

20

He hecho varias aplicaciones el año pasado. Aquí está mi regla de oro:

  1. Use UIView hasta que no haga lo que desea.
  2. Luego, vaya a CoreAnimation. Pero antes de profundizar demasiado ...
  3. Si escribe más de unas pocas animaciones, use Cocos2D.
+0

¿Qué está haciendo mejor Cocos2D? ¿No tiene entonces otros problemas relacionados con el manejo de eventos táctiles y muchas otras cosas que faltan en OpenGL ES? – Thanks

+0

Cocos2D agrega muchos métodos de conveniencia, por lo que el código es mucho más compacto. Tienen algunos grandes efectos incorporados. En pocas palabras, si está haciendo un montón de animación, escribirá menos código que OpenGL ES o Core Animation si usa Cocos2D. Tienen sus propios métodos de manejo táctil, así que eso no es un problema en absoluto. –

+13

Mi sugerencia es no utilizar Cocos2D a menos que esté escribiendo un juego. Creo que ese es realmente su mejor caso de uso. Sin embargo, estoy de acuerdo en que debes usar las animaciones de UIView todo el tiempo que puedas, y para nada más que eso, utiliza CoreAnimation. –

2

No estoy seguro si estoy malinterpretando la respuesta de Chris a "¿Qué está haciendo mejor Cocos2D? ¿Entonces no tiene otros problemas con respecto al manejo de eventos táctiles y muchas otras cosas que faltan en OpenGL ES?"

Parece que la respuesta sugiere que Cocos2D no está basado en el framework OpenGL ES cuando en realidad es real. Si bien es un excelente motor de juegos en 2D, implementa OpenGL durante gran parte de su proceso de renderización (adjunto a una biblioteca de física que permite muchas posibilidades muy interesantes de animación) y Chris está en lo cierto, es mucho menos codificante.

Cuestiones relacionadas