如何保存基于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,但我不知道如何在动画序列发生时挂钩并逐帧捕获/保存视图。
据我所知,我需要挂钩动画块并保存每帧的舞台视图(以给定的帧速率?)。我怎样才能做到这一点?我可以使用某种回调吗?
在寻找解决方案时,我遇到了另一个看起来更有前途的选项(基于此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的冻结动画帧。
感谢您解决此问题的任何帮助。