Iphone 用于animationDidStop的CABasicAnimation代理?

Iphone 用于animationDidStop的CABasicAnimation代理?,iphone,cabasicanimation,Iphone,Cabasicanimation,我按照页面底部的示例调用animationDidStop函数 作者说: 我有一个对象,它是专门为动画的代理而设计的,它所做的只是保留对目标对象的引用,接受animationDidStop:消息,然后释放它自己 这表明你不应该做: [animation setDelegate:self]; 我对应用程序编程相当陌生,有人能概述一下我可能如何做到这一点吗?或者向我发送一个链接,其中有解释。实现: - (void)animationDidStop:(CAAnimation *)theAnimati

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

作者说:

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

这表明你不应该做:

[animation setDelegate:self];
我对应用程序编程相当陌生,有人能概述一下我可能如何做到这一点吗?或者向我发送一个链接,其中有解释。

实现:

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
在委托对象上。您还可以实现:

- (void)animationDidStart:(CAAnimation *)theAnimation
在动画开始时接收呼叫

有关更多信息,请参阅以下部分的“代表”部分:

只是设置

[UIView setAnimationDelegate:self];
当动画开始或结束时,不会调用任何动画代理方法

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

1) 在您的实现部分添加

@implementation MyViewWithAnimations <UIApplicationDelegate>

3) 按照苹果的建议做,使用基于块的动画方法


有时需要在动画完成时将层的实际值设置为toValue。如果是更复杂的动画,例如设置CAGradientLayer颜色的动画,则需要这样做

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

这是正确的答案。为什么有人否决了这一点,尤其是没有评论?那么为什么文档中说在setAnimationDidStopSelector方法的UIView类参考部分中使用“animationDidStop:(NSString*)animationID finished:(NSNumber*)finished context:(void*)?您的意思是它应该执行[animation setDelegate:self]?文章说要调用它。请注意,
CAAnimation
delegate
很强,因此您可能需要将其设置为
nil
,以避免保留循环!不留下评论的否决投票对任何人都没有帮助。尽管我不是否决投票的人,但我确信这是因为您正在将“UIApplicationLegate”添加到类中,即使它与动画的委托无关。
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
  self.gradientLayer.colors = (NSArray *)((CABasicAnimation*)theAnimation).toValue;
}