duration 和 UISpringTimingParameters 在 UIViewPropertyAnimator 中如何交互?

How do duration and UISpringTimingParameters interact in UIViewPropertyAnimator?

iOS 10 有几个新的 类 用于动画。值得注意的包括 UIViewPropertyAnimator and UISpringTimingParameters. The property animator can be created 以及持续时间和计时参数 - 计时参数可以是 spring 参数的实例。

一个常见的 complaint about spring animation APIs in iOS in the past is that they require a duration - the duration of a real spring animation should be determined by the spring properties like damping ratio and initial velocity. UISpringTimingParameters can be created 具有这些类型的参数。

我的问题:当它的时序曲线是spring时,UIViewPropertyAnimator是否仍然使用你给它的持续时间?或者它会丢弃持续时间并使用 spring 参数来计算它吗?对于 Apple 来说,这将是一个奇怪的 API 决定,但如此接近为设计师提供他们想要的东西(真实 springs)但还没有完全达到目标(强制指定持续时间)似乎也很奇怪).

UIViewPropertyAnimator 就像 UIView 动画的面向对象版本。注:UISpringTimingParameters包含两种init方法:init(dampingRatio: CGFloat, initialVelocity: CGVector) like UIView Spring Animation API,是spring动画的简化版; init(mass: CGFloat, stiffness: CGFloat, damping: CGFloat, initialVelocity: CGVector) 喜欢核心 Spring 动画 API 这是完整的 spring 动画。

回答:spring时序为init(dampingRatio: CGFloat, initialVelocity: CGVector)UIViewPropertyAnimator实例的动画时长就是你设置的时长; spring 时间为 init(mass: CGFloat, stiffness: CGFloat, damping: CGFloat, initialVelocity: CGVector)UIViewPropertyAnimator 实例的动画持续时间将是此 spring 时间计算的时间。很容易验证它。你可以使用我的演示:ControlPanelAnimation.

UIViewSpringAnimationAPI是CoreSpringAnimationAPI的简化版,正如你引用的文章所说,UIViewSpringAnimation API 不擅长真正的振荡,但它很容易控制:大多数时候你需要一个动画,你确定它的持续时间。 Core Spring Animation API: CASpringAnimation,它有真实的spring行为,但它的持续时间不容易控制,它的动画持续时间取决于它的四个物理参数。