结合许多 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的主要内容,如果未能解决你的问题,请参考以下文章

CNN和Transformer相结合的模型

区块链技术与众筹行业紧密结合的创新案例

30s快速开通微商城,零售+分销结合,支持直播美颜

UISlider 与 ProgressView 相结合

SwiftUI 结合 Debounce TextField

Scrapy将产量与同一包装结合起来