UIViewPropertyAnimator中duration和UISpringTimingParameters如何交互?

Posted

技术标签:

【中文标题】UIViewPropertyAnimator中duration和UISpringTimingParameters如何交互?【英文标题】:How do duration and UISpringTimingParameters interact in UIViewPropertyAnimator? 【发布时间】:2016-08-02 21:51:44 【问题描述】:

ios 10 有几个新的动画类。值得注意的包括UIViewPropertyAnimatorUISpringTimingParameters。属性动画师可以是created,带有持续时间和时间参数——时间参数可以是弹簧参数的一个实例。

过去,关于 iOS 中弹簧动画 API 的一个常见 complaint 是它们需要持续时间 - 真正的弹簧动画的持续时间应由阻尼比和初始速度等弹簧属性确定。 UISpringTimingParameters 可以是 created 与这些类型的参数。

我的问题UIViewPropertyAnimator 的时序曲线是弹簧时,是否仍然使用您给它的持续时间?或者它会丢弃持续时间并使用弹簧参数来计算它吗?对于 Apple 而言,这将是一个奇怪的 API 决定,但如此接近为设计师提供他们想要的东西(真正的弹簧)却还没有完全实现(强制指定持续时间)似乎也很奇怪。

【问题讨论】:

【参考方案1】:

UIViewPropertyAnimator 类似于 UIView 动画的面向对象版本。注:UISpringTimingParameters包含两种init方法:init(dampingRatio: CGFloat, initialVelocity: CGVector)类似UIView Spring Animation API,是spring动画的简化版; init(mass: CGFloat, stiffness: CGFloat, damping: CGFloat, initialVelocity: CGVector) 像 Core Spring Animation API 一样是完整的弹簧动画。

答案:弹簧时间为init(dampingRatio: CGFloat, initialVelocity: CGVector)UIViewPropertyAnimator 实例的动画持续时间将是您设置的持续时间;使用init(mass: CGFloat, stiffness: CGFloat, damping: CGFloat, initialVelocity: CGVector) 的弹簧计时,UIViewPropertyAnimator 实例的动画持续时间将是这个弹簧计时计算的一个。很容易验证它。你可以使用我的演示:ControlPanelAnimation。

UIView Spring Animation API 是 Core Spring Animation API 的简化版,正如你引用的文章所说,UIView Spring Animation API 不擅长真正的振荡,但很容易控制:大多数时候你肯定需要一个动画它的持续时间。核心弹簧动画API:CASpringAnimation,它有真实的弹簧行为,但它的持续时间不容易控制,它的动画持续时间最多它的四个物理参数。

【讨论】:

以上是关于UIViewPropertyAnimator中duration和UISpringTimingParameters如何交互?的主要内容,如果未能解决你的问题,请参考以下文章

NSLayoutConstraints 的 UIViewPropertyAnimator 使视图消失

UIViewPropertyAnimator - 简单地停止所有动画,而不是特定的?

无法使用 UIViewPropertyAnimator.fractionComplete 驱动 UIView.transition

结合许多 UIViewPropertyAnimator

UIViewPropertyAnimator 不尊重持续时间和延迟参数

扩展 UIViewPropertyAnimator?