UIViewPropertyAnimator中duration和UISpringTimingParameters如何交互?
Posted
技术标签:
【中文标题】UIViewPropertyAnimator中duration和UISpringTimingParameters如何交互?【英文标题】:How do duration and UISpringTimingParameters interact in UIViewPropertyAnimator? 【发布时间】:2016-08-02 21:51:44 【问题描述】:ios 10 有几个新的动画类。值得注意的包括UIViewPropertyAnimator
和UISpringTimingParameters
。属性动画师可以是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