Core Animation allows for custom animations by implementing the actionForKey method in your CALayer based class:
- (id)actionForKey:(NSString
Have you verified that your method is being called with key
as @"onOrderOut"
and that your method is returning the correct animation?
Quoting John Harper on quartz-dev mailing list:
There's a fundamental problem with returning any animation for the onOrderOut key—by the time the animation should be running, the layer is no longer in the tree, so it has no effect. So onOrderOut is not useful for triggering animations; it may be useful for running other code when layers are removed from the tree.
The best solution I've found for this (assuming the default fade transition on the parent is not what you want, which it often isn't) is to add custom animations to apply the removal effect you want, then, in the didStop animation delegate, actually remove the layer. It's often convenient to create a single group of animations with the delegate property set, and fillMode=forwards, removedOnCompletion=NO so that you can remove the layer at the end of the animation with no possibility of the layer still being visible in its normal state.
If you do many case of this, it is easy to write a common superclass that starts an animation, sets the animation delegate to the class and implements +animationDidStop:
to remove the layer w/o animation enabled. This restores the fire-and-forget nature of CoreAnimation that you'd have hoped would be present with the default implementation.