ios弹簧动画实现

时间:2022-06-08 20:32:29

我们经常看到弹簧动画,像我们熟悉的微博就是一例,其实弹簧的动画的实现是很简单的,比如我想是想某个按钮的上下震动的弹簧效果:

    UIButton *button = [[UIButtonalloc]initWithFrame:CGRectMake(100,100,100,50)];

    button.backgroundColor = [UIColorredColor];

    [self.viewaddSubview:button];

    

   [UIViewanimateWithDuration:1delay:0.5usingSpringWithDamping:0.3initialSpringVelocity:0.6options:UIViewAnimationOptionCurveEaseInOutanimations:^{

      button.frame =CGRectMake(100,400,100,50);

   } completion:^(BOOL finished) {

   }];


UIView的分类为我们实现了animateWithDuration这个方法,使得我们很容易就能实现弹簧效果。

+ (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

参数解析:

duration:动画的持续时间

delay:动画延时几秒执行

dampingRatio :动画阻尼系数

velocity:动画开始速度

options:动画效果参数

completion:动画执行完成的回调

其中:dampingRatio(动画阻尼系数)和velocity(动画开始速度)是需要重点了解的。阻尼系数(0~1),学物理的时候因该接触过,衡量阻力大小的一个标准,阻尼系数越大则说明阻力越大,动画的减速越开, 如果设为一的话,几乎没有弹簧的效果。而velocity(动画开始速度:0~1)想对来说比较好理解,就是弹簧动画开始时的速度。