免费开源的iOS开发学习平台

核心动画CoreAnimation:6-CASpringAnimation弹簧动画

CASpringAnimation类是iOS9中新增的类,属于CABasicAnimation的子类,通过CASpringAnimation类可以创建具有弹簧效果的动画。

CASpringAnimation类

在CASpringAnimation类的定义中,包含了如下几个属性,我们可以通过设置这些属性来设置弹簧动画的展示效果。

  • mass:质量,影响图层运动时的惯性,mass取值越大,动画的时间越长
@property CGFloat mass;
  • stiffness:弹簧钢度系数,取值0~100,默认取值100
@property CGFloat stiffness;
  • damping:阻尼系数,影响反弹的次数,取值大于0,默认取值10
@property CGFloat damping;
  • 初始速度,默认为0
@property CGFloat initialVelocity;
  • 获取反弹时的停顿时间,只读属性
@property(readonly) CFTimeInterval settlingDuration;

CASpringAnimation类动画示例

我们通过一个实际的案例,演示一下弹簧动画的效果。

  • 在控制器类中添加一个CALayer类的属性,作为动画播放的layer
@interface ViewController ()
@property (nonatomic, strong) CALayer *myLayer;
@end
  • 通过懒加载的方式,设置自定义layer的属性
-(CALayer *)myLayer{
    if (_myLayer == nil) {
        _myLayer = [CALayer layer];
        _myLayer.frame = CGRectMake(140, 100, 100, 100);
        _myLayer.backgroundColor = [UIColor yellowColor].CGColor;
        _myLayer.borderColor = [UIColor redColor].CGColor;
        _myLayer.borderWidth = 4.0;
        _myLayer.cornerRadius = 2.0;   
    }
    return _myLayer;
}
  • 添加该自定义layer到控制器视图的layer上
- (void)viewDidLoad {
    [super viewDidLoad];
    [self.view.layer addSublayer:self.myLayer];
}
  • 当点击屏幕时,播放弹簧动画。开发者可以通过修改弹簧动画的样式属性来验证弹簧动画所展示的不同效果。
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    //1. 实例化CASpringAnimation对象
    CASpringAnimation *animation = [CASpringAnimation animation];
    //2. 设置动画属性
    animation.keyPath = @"transform.translation.y";
    animation.fromValue = @0;
    animation.toValue = @200;
    animation.mass = 100;
    animation.stiffness = 100;
    animation.damping = 10;
    animation.duration = 2.0;
    //3. 添加动画对象到一个CALayer类的对象上,播放动画
    [self.myLayer addAnimation:animation forKey:nil];
}

示例代码

https://github.com/99ios/14.4.6