美文网首页iOS干货ios 进阶iOS动画效果
iOS9 CASpringAnimation 弹簧动画详解

iOS9 CASpringAnimation 弹簧动画详解

作者: sunljz | 来源:发表于2015-07-28 20:13 被阅读10246次

1. CASpringAnimation

iOS9才引入的动画类,它继承于CABaseAnimation,用于制作弹簧动画,先演示个例子


图片1图片1

2. 构建过程

        let spring = CASpringAnimation(keyPath: "position.x")
        spring.damping = 5;
        spring.stiffness = 100;
        spring.mass = 1;
        spring.initialVelocity = 0;
        spring.fromValue = label.layer.position.x;
        spring.toValue = label.layer.position.x + 50;
        spring.duration = spring.settlingDuration;
        label.layer.addAnimation(spring, forKey: spring.keyPath);

label 替换成你要进行动画的视图,然后完成一个弹簧动画了

3. 参数说明

mass:

质量,影响图层运动时的弹簧惯性,质量越大,弹簧拉伸和压缩的幅度越大
如果把质量改成10,则动画变成


图片2图片2

动画的速度变慢,并且波动幅度变大

stiffness:

刚度系数(劲度系数/弹性系数),刚度系数越大,形变产生的力就越大,运动越快

damping:

阻尼系数,阻止弹簧伸缩的系数,阻尼系数越大,停止越快

initialVelocity:

初始速率,动画视图的初始速度大小
速率为正数时,速度方向与运动方向一致,速率为负数时,速度方向与运动方向相反
如果把速率改成-20,则动画变成


图片3图片3

这里会看到 label 先往左边移动一小段距离,然后再开始往右移动,因为初始速度往左,所以会经历先减速,后加速的过程

settlingDuration:

结算时间 返回弹簧动画到停止时的估算时间,根据当前的动画参数估算
通常弹簧动画的时间使用结算时间比较准确

相关文章

网友评论

  • 风吹柳絮如花落:您好,使用spring能否做view中心的动态轨迹为圆弧的动画
  • JChow:我想问下,CASpringAnimation iOS9以下能用吗,还是说只有iOS9以上才可以用?
    JChow:好吧,亲测过iOS9以下用不了
  • 柯柯格格:如果说绕着一个中心点执行弹性动画,如何做??
    Scott丶Wang:@柯柯格格 你可以试着用CAShapeLayer、UIBezierPath、CASpringAnimation试试,这个应该可以实现你想要的功能
  • seven_七夕:动画完成后又回到了原来的位置怎么办?
    小小机器人:@seven_七夕 添加
    springAnim.fillMode = kCAFillModeForwards;
    springAnim.removedOnCompletion = NO;
  • ttys苹果核:我想对一个view上的约束进行这个动画 应该如何操作
    ttys苹果核:@sunljz 恩 了解 thx
    sunljz:@Luxlight 使用约束的话要用UIView 的这个方法
    ```
    + (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay usingSpringWithDamping:(CGFloat)dampingRatio initialSpringVelocity:(CGFloat)velocity options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^ __nullable)(BOOL finished))completion
    ```
    CAAnimation 的子类都只能对Layer添加动画,Layer中没有自动布局的约束
    落影loyinglin:@Luxlight UIView 的Block动画可以做这个,在block里面直接修改constraint的值
  • 3a7315642c9c:如果我想用这个方法对UIBezierPath进行形变动画应该怎么来做?谢谢!
    sunljz:@Dendim0N 这个不是 CAKeyframeAnimation 的子类,所以不能设置 path
  • 十一岁的加重:类似安卓的那种设置界面的cell,拉到底或者拉到顶再拉的话,cell会有种放大的效果,有个最大放大值,请教这种效果iOS能做吗
    sunljz:@十一岁的加重 没有怎么留意过 andriod ,如果是 cell 的高度不变,只是里面的内容放大的话,是可以做的。监听 scrollView 的回调,动态调整 cell 的内容区域。这个需要自己实现。网上有一些类似的例子,就像 path 列表 header 效果那样,下拉后头像放大
  • FengxinLi: [UIView animateWithDuration:0.5 delay:0 usingSpringWithDamping:0.5 initialSpringVelocity:0.5 options:UIViewAnimationOptionCurveEaseInOut animations:^{

    } completion:^(BOOL finished) {

    }];
    这个也可以实现震动。但是感觉IOS9 专门用个 更好。请问楼主这二种到底是一样的不?
    sunljz:@Fengxinliju CASpringAnimation 的动画属性更丰富一点,可以设置质量,刚度这些,并且由于 CASpringAnimation 是从CAAnimation派生过来的,所以可以和其他动画组合

    这两种动画底层实现是一样的,因为动画效果一样,就是可设置的属性不同

本文标题:iOS9 CASpringAnimation 弹簧动画详解

本文链接:https://www.haomeiwen.com/subject/srbmqttx.html