Until now I've been able to animate the custom properties of my CALayer subclass, thanks to + (BOOL)needsDisplayForKey:(NSString *)key
and CABasicAnimations
.
However it turns out that chaining animations can become very tricky because all the code takes place in a single animationDidStop:finished:
method.
So I wanted to switch to CATransactions
since they support the new block syntax, which would allow me to specify a completion block with + (void)setCompletionBlock:(void (^)(void))block
.
But it appears to me that CATransaction
can only animate the so-called 'animatable properties' and it doesn't work with my custom layer properties, even with the needsDisplayForKey:
method implemented.
So is there a way to make custom properties in a CALayer
to animate with CATransaction
?
EDIT: My intent is to do something along the lines:
[CATransaction begin];
[CATransaction setAnimationDuration:0.5];
[CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[CATransaction setCompletionBlock:^{
NSLog(@"blabla");
}];
myLayer.myProperty = newValue;
[CATransaction commit];
The update of myProperty value to newValue
is not animated. I've tried to implement
actionForLayer:forKey:
in the view managing myLayer to return a CABasicAnimation
. But actionForLayer:forKey:
is never called with the key myProperty
. And yes, myLayer
is not view.layer
but a sublayer, and yes I set the delegate of myLayer
to the containing view.