逐帧保存CoreAnimation序列

时间:2015-05-04 14:30:42

标签: ios swift animation core-animation

如何保存基于CoreAnimation的动画的每一帧(作为图像文件)?

这是我的小游乐场。动画持续2.4秒。

let stage = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 300, height: 300))
stage.backgroundColor = UIColor.blueColor();

var dot = UIView(frame: CGRectMake(0, 0, 10, 10))
dot.backgroundColor = UIColor.redColor()
dot.center = stage.center

UIView.animateWithDuration(2.4, animations: { () -> Void in
    dot.center.y = dot.center.y + 50
})

我知道如何将静态UIView帧保存为PDF,但我不知道如何在动画序列发生时挂钩并逐帧捕获/保存视图。

选项1

据我所知,我需要挂钩动画块并保存每帧的舞台视图(以给定的帧速率?)。我怎样才能做到这一点?我可以使用某种回调吗?

选项2

在寻找解决方案时,我遇到了另一个看起来更有前途的选项(基于此question和这个真棒blog post)。使用CBAnimation,设置timingFunction,然后将timeOffset设置为我想要呈现的进度状态。

以下是50%进度的框架示例(此处使用不同的示例)。

var drawAnimation = CABasicAnimation(keyPath: "strokeEnd")
…
drawAnimation.fromValue = NSNumber(float: 0.0)
drawAnimation.toValue = NSNumber(float: 1.0)
drawAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)

circle.addAnimation(drawAnimation, forKey: "drawCircleAnimation")

circle.speed = 0.0;
circle.timeOffset = 0.5

问题在于我无法捕获这个基于timeOffset的动画状态。当我渲染视图时,我只获得最终状态而不是0.5的冻结动画帧。

感谢您解决此问题的任何帮助。

0 个答案:

没有答案