首页 文章

观察UIView.animateWithDuration / CABasicAnimation的进度?

提问于
浏览
1

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

我正在制作一个视图的框架,我需要知道它是如何进展的 . 我的想法是,我也可以

1)点击CAAnimation相关的东西或

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

方法1)结果是一个死胡同,检查CAAnimations工作的内部告诉我绝对没有...和2)是有缺陷的,因为“模型层树立即更新,并且作为演示文稿难以点击演示树你开始时,图层是零 .

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

1 回答

  • 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

相关问题