有没有办法观察UIView.animateWithDuration的“时间进度”......来自UIView / CA动画的方法系列?
我正在制作一个视图的框架,我需要知道它是如何进展的 . 我的想法是,我也可以
1)点击CAAnimation相关的东西或
2)观察动画属性(如框架)并对每个屏幕框架进行自己的计算 .
方法1)结果是一个死胡同,检查CAAnimations工作的内部告诉我绝对没有...和2)是有缺陷的,因为“模型层树立即更新,并且作为演示文稿难以点击演示树你开始时,图层是零 .
我非常绝望,我认为挂钩到CADisplayLink会给我一个勾号然后我只是检查一下受动画影响的东西,但没有什么可以挖掘 . 你认为在与动画方法相同的范围内推出的NSTimer方式是否合适?如果我知道动画持续时间,那么我可以自己生成进度 .
1 回答
如果您想要的只是时间值,那么您可以在
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