我希望我的动画循环并逐渐减慢。我不认为在这种情况下可以使用“重复”属性,因为动画必须在每次迭代结束时减速。我的计划很简单:
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);
}
问题是这不能正常工作。它只播放一次样本动画并停止播放。看起来我错过了核心动画非常重要的东西。是否有一些更合适或更合适的解决方案?我可以使用计时曲线来影响整个循环动画,而不仅仅是它的样本部分吗?
提前致谢。
答案 0 :(得分:0)
没有渲染,因为渲染需要抽运行循环。请参阅我对Displaying images in sequence with a loop
的回答我认为在这种情况下你可以在每个动画上设置一个延迟,相当于前一个动画的延迟+持续时间,所以动画在时间轴上是一对一的。
但是,通过启动下一个较慢的动画来连接响应动画的动画委托可能会更好。
这两个都使您的动画循环异步运行,因此运行循环可以正常执行。