【问题标题】:How to loop an animation with some changes at each iteration?如何在每次迭代时循环播放一些变化的动画?
【发布时间】:2011-05-15 19:58:03
【问题描述】:

我希望我的动画循环播放并逐渐减速。我不认为在这种情况下可以使用“重复”属性,因为动画必须在每次迭代结束时放慢速度。我的计划很简单:

1) 创建并初始化一个动画(在 for 循环体之外)。

2) 创建一个 for 循环。在这个循环的主体中为我的动画设置持续时间属性。并开始将动画添加到我的视图中(它是显式动画)。

3) 等待持续时间并继续执行循环。

我使用了 usleep() 函数来等待动画结束。在下一次循环迭代中,添加了相同的动画并更改了它的持续时间属性(增加以减慢动画速度)。这是代码(所有初始化动画的代码都在上面,无需以下修改即可正常工作):

for (int i=1; i<10; i++) {
        // Find the duration (I simplified this part it depends on i value).
        keyframeAnim.duration = ...;
        // Add an animation.
        [self addAnimation:keyframeAnim forKey:@"loopingLongAnimation"];
        // Wait till it stops.
        usleep(keyframeAnim.duration);
    }

问题是这不能正常工作。它只播放一次示例动画并停止。看起来我错过了一些对核心动画非常重要的东西。为此目的是否有一些更合适或更合适的解决方案?我可以使用时序曲线来影响整个循环动画,而不仅仅是它的样本部分吗?

提前致谢。

【问题讨论】:

    标签: iphone loops core-animation


    【解决方案1】:

    没有渲染任何东西,因为渲染需要对运行循环进行抽水。查看我对Displaying images in sequence with a loop的回复

    我认为在这种情况下,您也许可以为每个动画设置一个延迟,相当于前一个动画的延迟 + 持续时间,因此动画在时间轴上是头对尾对齐的。

    但最好只连接一个动画委托,通过启动下一个较慢的动画来响应动画确实停止消息。

    这两者都使你的动画循环异步运行,从而使运行循环可以正常执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-08
      • 2018-04-09
      • 2020-01-05
      • 2016-03-01
      • 2021-12-15
      • 2015-04-16
      • 1970-01-01
      • 2013-02-28
      相关资源
      最近更新 更多