如何在每次迭代时循环动画并进行一些更改?

时间:2011-05-15 19:58:03

标签: iphone loops core-animation

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

1)创建并初始化动画(在for-loop体外)。

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);
    }

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

提前致谢。

1 个答案:

答案 0 :(得分:0)

没有渲染,因为渲染需要抽运行循环。请参阅我对Displaying images in sequence with a loop

的回答

我认为在这种情况下你可以在每个动画上设置一个延迟,相当于前一个动画的延迟+持续时间,所以动画在时间轴上是一对一的。

但是,通过启动下一个较慢的动画来连接响应动画的动画委托可能会更好。

这两个都使您的动画循环异步运行,因此运行循环可以正常执行。