user157733
user157733

Reputation: 579

CABasicAnimation delegate for animationDidStop?

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.

Upvotes: 15

Views: 25516

Answers (3)

james_womack
james_womack

Reputation: 10306

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;
}

Upvotes: 4

lindinax
lindinax

Reputation: 282

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

Upvotes: 0

thefaj
thefaj

Reputation: 926

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

Upvotes: 38

Related Questions