iOS 10有几个新的动画类。值得注意的包括UIViewPropertyAnimator
和UISpringTimingParameters
。属性动画可以是created,具有持续时间和时间参数 - 时间参数可以是弹簧参数的实例。
过去iOS中一个常见的complaint关于弹簧动画的API是它们需要持续时间 - 真实弹簧动画的持续时间应该由弹簧属性决定,如阻尼比和初始速度。这些参数可以UISpringTimingParameters
created。
我的问题:UIViewPropertyAnimator
当时间曲线是弹簧时,是否仍然使用你给它的持续时间?或者它会丢弃持续时间并使用弹簧参数来计算它?对于Apple来说,这将是一个奇怪的API决定,但是如此接近于为设计师提供他们想要的东西(真正的弹簧)并且还没有达到目标(强制指定持续时间)似乎也很奇怪。
答案 0 :(得分:8)
UIViewPropertyAnimator
就像UIView Animation的面向对象版本。注意:UISpringTimingParameters包括两种初始化方法:init(dampingRatio: CGFloat, initialVelocity: CGVector)
,如UIView Spring Animation API,它是弹簧动画的简化版本; 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并不擅长真正的振荡,但它很容易控制:大多数时候你需要动画你确定它的持续时间Core Spring Animation API:CASpringAnimation,它具有真正的弹簧行为,但控制其持续时间并不容易,其动画持续时间高达其四个物理参数。