用于animationDidStop的CABasicAnimation委托?

时间:2010-04-08 11:36:20

标签: iphone cabasicanimation

我按照页面底部的示例来调用animationDidStop函数。

http://www.informit.com/articles/article.aspx?p=1168314&seqNum=2

作者说:

  

我有一个专门设计为动画委托的对象,它所做的只是保存对目标对象的引用,接受animationDidStop:消息然后释放自己。

这表明你不应该这样做:

[animation setDelegate:self];

我对应用程序编程很新,有人可以概述我如何做到这一点吗?或者给我一个解释的链接。

3 个答案:

答案 0 :(得分:38)

实施:

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag

在您的委托对象上。您还可以实施:

- (void)animationDidStart:(CAAnimation *)theAnimation

在动画开始时接听电话。

有关详细信息,请参阅以下代理部分: http://developer.apple.com/iphone/library/documentation/GraphicsImaging/Reference/CAAnimation_class/Introduction/Introduction.html

答案 1 :(得分:4)

有时需要在动画完成时将图层的实际值设置为toValue。当它是一个更复杂的动画,例如动画CAGradientLayer的颜色时,这是必需的。

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
  self.gradientLayer.colors = (NSArray *)((CABasicAnimation*)theAnimation).toValue;
}

答案 2 :(得分:0)

只需设置

[UIView setAnimationDelegate:self];

在动画开始或结束时不会调用任何动画委托方法。

此问题可以通过以下解决方法之一解决。

1)在您的实施部分添加

@implementation MyViewWithAnimations <UIApplicationDelegate>


2)在你的动画中,begin-commit-block add

[UIView setAnimationWillStartSelector:@selector(animationDidStart:)];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:)];


3)做Apple建议并改为使用基于块的动画方法。

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIView_Class/UIView/UIView.html