Hasta ahora he podido animar las propiedades personalizadas de mi subclase CALayer, gracias a + (BOOL)needsDisplayForKey:(NSString *)key
y .Animar propiedades personalizadas de CALayer dentro de una CATransacción
Sin embargo, resulta que encadenar animaciones puede ser muy complicado porque todo el código se lleva a cabo en un solo método animationDidStop:finished:
.
Así que quería cambiar a CATransactions
ya que admiten la nueva sintaxis de bloque, lo que me permitiría especificar un bloque de finalización con + (void)setCompletionBlock:(void (^)(void))block
.
Pero me parece que CATransaction
sólo puede animar a los llamados '' animables propiedades y que no funciona con mis propiedades de las capas a medida, incluso con el método implementado needsDisplayForKey:
.
¿Hay alguna forma de crear propiedades personalizadas en un CALayer
para animar con CATransaction
?
EDIT: Mi intención es hacer algo a lo largo de las líneas:
[CATransaction begin];
[CATransaction setAnimationDuration:0.5];
[CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[CATransaction setCompletionBlock:^{
NSLog(@"blabla");
}];
myLayer.myProperty = newValue;
[CATransaction commit];
La actualización del valor myProperty a newValue
no está animado. Intenté implementar actionForLayer:forKey:
en la vista que administra myLayer para devolver CABasicAnimation
. Pero actionForLayer:forKey:
nunca se llama con la clave myProperty
. Y sí, myLayer
no es view.layer
sino una subcapa, y sí configuro el delegado de myLayer
en la vista que contiene.
confirmo que funciona sin embargo, me siento un poco decepcionado de que no es posible tener la misma magia detrás de las propiedades personalizadas que las propiedades animables. Y voy a ejecutar algunas pruebas para ver qué pasa si la duración de la CATransaction se establece en un valor inferior al que ninguno de los del enlace adjunto CAAnimations – romrom