【问题标题】:Core Animation... cyclic animations?核心动画...循环动画?
【发布时间】:2010-10-21 12:37:49
【问题描述】:

为了尽可能简单地表达我的问题,有没有办法创建一个核心动画序列来一遍又一遍地重复直到停止?

具体来说,我正在创建一个自定义类,我希望它有一个 -start 和 -stop 方法,这将导致它跳动。写脉冲的动画代码不是问题,而是如何让它重复?

提前感谢您的任何回答!

【问题讨论】:

    标签: cocoa xcode macos core-animation


    【解决方案1】:

    根据the documentation,您可以通过创建具有极大repeatCount 的动画来做到这一点(代码摘自我链接到的文档):

    // create the animation that will handle the pulsing.
    CABasicAnimation* pulseAnimation = [CABasicAnimation animation];
    
    // over a one second duration, and run an infinite
    // number of times
    pulseAnimation.duration = 1.0;
    pulseAnimation.repeatCount = HUGE_VALF;
    
    // we want it to fade on, and fade off, so it needs to
    // automatically autoreverse.. this causes the intensity
    // input to go from 0 to 1 to 0
    pulseAnimation.autoreverses = YES;
    

    edit:OP 询问如何停止动画。来自文档中的next paragraph

    您通过以下方式启动显式动画 发送addAnimation:forKey: 消息 到目标层,通过 动画和标识符为 参数。一旦添加到目标 层显式动画将运行 直到动画完成,或者它 从层中移除。这 用于添加动画的标识符 一个层也被用来阻止它 调用removeAnimationForKey:。你 可以通过以下方式停止图层的所有动画 发送层 a removeAllAnimations 消息。

    【讨论】:

    • 与您粘贴的代码示例中的注释相反,1e100 不是无限的,它只是 10**100。在 math.h 中定义的 INFINITY 常数会更好。
    • 由于 cmets 中没有足够的空间,因此在答案中做出了回应。
    • @PeterHosey 在概念上是一样的。 INFINITY 定义为 HUGE_VALF。但是,1e100 大于浮点数允许的最大值。我更喜欢使用 MAXFLOAT。
    • 这些动画在后台运行时变黑,然后从后台返回。如何解决这个问题?
    • @PsychoDad 我建议您提出一个更详细的新问题。只是在评论中提问意味着只有我可能会看到它,您无法详细说明您的问题,并且没有太多空间可以在评论中回答您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多