观察UIView.animateWithDuration / CABasicAnimation的进度?

时间:2016-07-21 09:27:22

标签: ios animation uiview

有没有办法观察时间进度" UIView.animateWithDuration ...来自UIView /或CA动画的一系列方法?

我正在为一个视图框架制作动画,我需要了解它的进展情况。 我的思路是,我可以

1)点击与CAAnimation相关的内容或

2)观察动画属性(如框架)并对每个屏幕框架进行自己的计算。

方法1)结果是死路一条,检查CAAnimations如何工作的内部告诉我绝对没有...和2)有缺陷,因为"模型层树立即更新并点击演示文稿树很难,因为当你开始时表示层是零。

我非常绝望,我认为挂钩到CADisplayLink会给我一个勾号然后我只是检查一下受动画影响的东西,但没有什么可以挖掘。 你认为在与动画方法相同的范围内推出的NSTimer方式是否合适?如果我知道动画持续时间,那么我可以自己生成进度。

1 个答案:

答案 0 :(得分:0)

如果您想要的只是时间值,那么您可以在CACurrentMediaTime()减去动画开始时间进行数学计算。我在Github上有一个名为KeyframeViewAnimations的示例项目就是这样做的。

该项目支持暂停和恢复并清除基于UIViewCAAnimation的动画。在这两种情况下,它都会深入研究基础CAAnimations

我有另一个项目,它使用动画图层的presentationLayer的值来进行命中测试,这样您就可以点击飞行中的视图并开始/暂停动画。那个可以在这里找到: iOS-CAAnimation-group-demo

我的代码使用NSTimer来更新动画的进度。如你所提到的,最好使用CADisplayLink计时器。

我也在查看添加到iOS 10的新UIViewPropertyAnimator类。这使得暂停,反转和清理UIView动画变得容易,而无需深入了解基础CAAnimations。看到我刚发布的这个帖子:

<强> Is there a way to observe changes to fractionComplete in UIViewPropertyAnimator