iOS动画:Layer弹簧(6)

UIKit和Core Animation弹簧

  弹簧和摆钟类似,自然情况下,其运行轨迹都类似于一个逐渐减弱的正弦波,如图。
iOS动画:Layer弹簧(6)_第1张图片
影响波形状的因素主要4个:
damping:阻尼系数
mass:质量
stiffness:弹性系数
initial velocity:初速度

当使用UIKit中的弹簧效果animate方法时,你只能配置其中的两个参数usingSpringWithDamping和initialSpringVelocity,为了在给定的duration内停止动画,系统会动态调整其它参数的值以达到弹簧效果,但动画表现出来的实际效果却不一定是我们想要的。
而Core Animation却能让你通过CASpringAnimation类为layer创建合适的弹簧动画,你可以设置弹簧系统的各个参数以达到预期的效果,但是这种方法的缺点就是你无法告诉弹簧系统他的持续时间应该是多少,这只能取决于你提供的属性值,由系统决定持续时间。

创建spring Animation

因为CASpringAnimation继承至CABasicAnimation,你可以仅仅将前面几章创建CABasicAnimation替换成CASpringAnimation即可。

      let jump = CASpringAnimation(keyPath: "position.y")
      jump.damping = 50.0
      jump.mass = 10.0
      jump.stiffness = 1500.0
      jump.initialVelocity = 100.0
      jump.fromValue = textField.layer.position.y + 1.0
      jump.toValue = textField.layer.position.y
      jump.duration = jump.settlingDuration
      textField.layer.add(jump, forKey: nil)

damping默认值为10.0,mass默认值为1.0,stiffness默认值为100.0,initialVelocity默认值为0.0,初速度可以为正负值,正值表示为摆钟落下方向的速度,负值表示为摆钟落下反方向的速度。
这里的duration不能设置成具体的值,因为它是由弹簧系统本身决定的,如果设置成具体的值,弹簧动画会提前结束,比如设置成0.25秒,效果如下:
iOS动画:Layer弹簧(6)_第2张图片

你可能感兴趣的:(iOS,Swift,动画)