有没有办法观察时间进度" UIView.animateWithDuration ...来自UIView /或CA动画的一系列方法?
我正在为一个视图框架制作动画,我需要了解它的进展情况。 我的思路是,我可以
1)点击与CAAnimation相关的内容或
2)观察动画属性(如框架)并对每个屏幕框架进行自己的计算。
方法1)结果是死路一条,检查CAAnimations如何工作的内部告诉我绝对没有...和2)有缺陷,因为"模型层树立即更新并点击演示文稿树很难,因为当你开始时表示层是零。
我非常绝望,我认为挂钩到CADisplayLink会给我一个勾号然后我只是检查一下受动画影响的东西,但没有什么可以挖掘。 你认为在与动画方法相同的范围内推出的NSTimer方式是否合适?如果我知道动画持续时间,那么我可以自己生成进度。
答案 0 :(得分:0)
如果您想要的只是时间值,那么您可以在CACurrentMediaTime()
减去动画开始时间进行数学计算。我在Github上有一个名为KeyframeViewAnimations的示例项目就是这样做的。
该项目支持暂停和恢复并清除基于UIView
和CAAnimation
的动画。在这两种情况下,它都会深入研究基础CAAnimations
。
我有另一个项目,它使用动画图层的presentationLayer的值来进行命中测试,这样您就可以点击飞行中的视图并开始/暂停动画。那个可以在这里找到: iOS-CAAnimation-group-demo
我的代码使用NSTimer
来更新动画的进度。如你所提到的,最好使用CADisplayLink
计时器。
我也在查看添加到iOS 10的新UIViewPropertyAnimator
类。这使得暂停,反转和清理UIView动画变得容易,而无需深入了解基础CAAnimations
。看到我刚发布的这个帖子:
<强> Is there a way to observe changes to fractionComplete in UIViewPropertyAnimator 强>