I am following the example at the bottom of the page to call an animationDidStop
function.
http://www开发者_运维技巧.informit.com/articles/article.aspx?p=1168314&seqNum=2
The author says:
I have an object that is designed specifically to be the delegate of animations and all it does is hold a reference to the target object, accept the animationDidStop: message and then release itself.
This suggests you shouldn't do:
[animation setDelegate:self];
I'm pretty new to app programming can someone outline how I might do this? Or send me a link where it is explained.
Implement:
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
on your delegate object. You can also implement:
- (void)animationDidStart:(CAAnimation *)theAnimation
to receive a call when the animation starts.
For more info, see the Delegates section of: http://developer.apple.com/iphone/library/documentation/GraphicsImaging/Reference/CAAnimation_class/Introduction/Introduction.html
Sometimes setting your layer's actual value to the toValue when the animation completes is required. When it's a more complex animation such as animating the colors of a CAGradientLayer, this is required.
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
self.gradientLayer.colors = (NSArray *)((CABasicAnimation*)theAnimation).toValue;
}
Just setting
[UIView setAnimationDelegate:self];
will not call any of the Animation delegate methods when the animation starts or ends.
This issue can be solved by one of the following workarounds.
1) In your implementation section add
@implementation MyViewWithAnimations <UIApplicationDelegate>
2) In your animation begin-commit-block add
[UIView setAnimationWillStartSelector:@selector(animationDidStart:)];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:)];
3) Do what Apple suggests and use the block-based animation methods instead.
http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIView_Class/UIView/UIView.html
精彩评论