¿Por qué los documentos indican que las animaciones CALayer deben estar en los bloques de animation UIView?

Actualmente estoy leyendo la Guía de Animación Core de Apple, donde encontré el siguiente pasaje sobre las vistas respaldadas por capas en iOS:

Si desea utilizar las classs de Core Animation para iniciar animaciones, debe emitir todas sus llamadas de Core Animation desde el interior de un bloque de animation basado en vistas. La class UIView deshabilita las animaciones de capas de forma pnetworkingeterminada, pero las vuelve a activar dentro de los bloques de animation. Entonces, los cambios que realice fuera de un bloque de animation no están animados.

Justo debajo de la cita, la documentation incluye el siguiente listdo de códigos:

[UIView animateWithDuration:1.0 animations:^{ // Change the opacity implicitly. myView.layer.opacity = 0.0; // Change the position explicitly. CABasicAnimation* theAnim = [CABasicAnimation animationWithKeyPath:@"position"]; theAnim.fromValue = [NSValue valueWithCGPoint:myView.layer.position]; theAnim.toValue = [NSValue valueWithCGPoint:myNewPosition]; theAnim.duration = 3.0; [myView.layer addAnimation:theAnim forKey:@"AnimateFrame"]; }]; 

lo que implica que tanto las animaciones implícitas como las explícitas en el respaldo de UIView s deben ubicarse dentro de un bloque de animation.

Sin embargo, he descubierto que esto es patentemente falso. Específicamente, he implementado exitosamente animaciones explícitas usando classs Core Animation fuera de un bloque de animation UIView .

¿He entendido mal este pasaje o está desactualizado u otra cosa?


Algunas notas adicionales:

Supongo que "la class UIView deshabilita las animaciones de capas de manera pnetworkingeterminada, pero las +[UIView setAnimationsEnabled:] dentro de los bloques de animation" hace reference al método +[UIView setAnimationsEnabled:] . Cuando vuelva a una computadora que pueda hacerlo, comprobaré si +[UIView areAnimationsEnabled] devuelve YES o NO .

Esa cita se refiere a la capa que está respaldando la vista. No es cierto para las capas autónomas que usted crea y administra usted mismo.


Cada vista en iOS está respaldada por una capa. Cuando cambia las properties de la vista, cambia la propiedad de la capa subyacente. Por defecto, la capa tendría animaciones implícitas, pero la capa "desactiva" ese comportamiento, excepto cuando está dentro de un bloque de animation UIView. Esto es a lo que se refiere esa parte de la documentation.

Hay un par de maneras en que puede usar Core Animation para animar una propiedad de capa. Lo más común es agregar el object de animation a la capa cuando desee animar la propiedad, pero también puede hacer personalizaciones a través del dictionary de actions y el dictionary de styles si siempre desea animar cuando cambia una propiedad. Los dos últimos también estarían deshabilitados para la capa que está respaldando una vista.