结合许多 UIViewPropertyAnimator
Posted
技术标签:
【中文标题】结合许多 UIViewPropertyAnimator【英文标题】:Combine many UIViewPropertyAnimators 【发布时间】:2017-11-09 17:36:28 【问题描述】:我在搞乱UIViewPropertyAnimator 的文档,我希望找到一种方法来组合两个 UIViewPropertyAnimator。
类似这样的:
let firstAnimator = UIViewPropertyAnimator(
duration: 2,
dampingRatio: 0.4,
animations: animation1
)
let secondAnimator = UIViewPropertyAnimator(
duration: 2,
dampingRatio: 0.4,
animations: animation2
)
firstAnimator.addAnimator(secondAnimator, withDelay: 1)
firstAnimator.startAnimation()
我缺少 UIViewPropertyAnimatorGroup 或类似的东西,这甚至存在吗?
【问题讨论】:
【参考方案1】:目前推荐的方法是使用UIViewPropertyAnimator
的数组。
这种方法在 WWDC 2017 演示文稿“使用 UIKit 的高级动画”中进行了详细概述。 https://developer.apple.com/videos/play/wwdc2017/230/
最重要的一点是将所有动画师保持在一起,每当发生基于手势的事件时,您都可以一次将更新应用到所有动画师。
var runningAnimators = [UIViewPropertyAnimator]()
// later in the code...
runningAnimators.forEach $0.pauseAnimation() // pause all animations
我在 GitHub 上有一个开源代码库,其中给出了以这种方式使用多个属性动画器的示例:https://github.com/nathangitter/interactive-animations
对于您的具体问题,为什么需要多个属性动画师?通常,当您想要具有多个时序曲线的单个动画时,您只需要多个动画师,但看起来您的时序参数是相同的。
【讨论】:
我想抽象动画的构成。这在两种情况下很有用:1)在一个动画师完成后,调用另一个,在一个动画师完成后,调用另一个(并将其抽象为在动画师层工作)2)如果你想做一个动画师,启动一个一段时间后,当两者都结束时调用完成处理程序(我知道您可以添加延迟动画,但动画仍然与动画师同时完成,这是有道理的) 您可能想编写自己的核心动画包装器。您是否正在尝试实现特定类型的动画?有一些很好的库可以抽象某些类型的动画。UIViewPropertyAnimator
似乎最适合需要手势驱动和可中断的动画。
@TiagoAlmeida 这个解决方案最终对你有用吗?以上是关于结合许多 UIViewPropertyAnimator的主要内容,如果未能解决你的问题,请参考以下文章