【问题标题】:CABasicAnimation delegate for animationDidStop?animationDidStop 的 CABasicAnimation 委托?
【发布时间】:2010-04-08 11:36:20
【问题描述】:

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

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

作者说:

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

这表明你不应该这样做:

[animation setDelegate:self];

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

【问题讨论】:

  • 你的意思是它应该做 [animation setDelegate:self]; ?文章说要这样称呼。
  • 请注意 CAAnimationdelegate 很强大,因此您可能需要将其设置为 nil 以避免保留循环!

标签: iphone cabasicanimation


【解决方案1】:

实施:

- (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

【讨论】:

  • 这是正确答案。为什么有人投了反对票,尤其是没有评论?
  • 那为什么文档说要在 UIView 类参考部分中为 setAnimationDidStopSelector 方法使用 'animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)'?
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    只是设置

    [UIView setAnimationDelegate:self];
    

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

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

    1) 在您的实施部分添加

    @implementation MyViewWithAnimations <UIApplicationDelegate>
    


    2)在你的动画开始提交块添加

    [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

    【讨论】:

    • 不发表评论就投反对票对任何人都没有帮助。
    • 尽管我不是第一个投反对票的人,但我确信这是因为您将“UIApplicationDelegate”添加到您的类中,即使它与动画的委托无关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    • 1970-01-01
    • 2011-01-12
    • 2023-04-03
    相关资源
    最近更新 更多