iOS的UI进阶iOS - UI动画相关其他

写一个酷炫的iOS进度条动画(二)

2017-01-23  本文已影响2583人  karthus

前面这篇文章里讲了大致的实现思路,这篇文章一步步实现一个进度条。就以上篇文章提到的第二个进度条为例。

原效果:


进度条11.gif

这个动画效果明显比铅笔那个要简单,实现起来效果也更好,动画更加平滑,还是按照老思路截几个关键帧的图来慢放一下动画。

1.png 2.png 3.png

这样就完成了箭头变化的形变动画,就是这么简单。顺便把恢复原样的动画也写一下:
只需要将toValue改为CATransform3DIdentity即可,不再更详细赘述

CABasicAnimation *resumeAnimation = [CABasicAnimation animationWithKeyPath:@"transform"];
resumeAnimation.toValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];

2.水流流下动画:此处直接新添加一个layer用作水流,让layer做形变,长度变化,实现类似水流不断流出变长效果,再同时做向下位移动画形成水流不断流出并流下的效果,思路大致是这样
// 添加一个layer,在当前进度条的进度位置
CALayer downLayer = [CALayer layer];
downLayer.frame = (CGRect){CGRectGetWidth(self.frame)
_progress,CGRectGetHeight(self.frame)/2,2,0};
downLayer.backgroundColor = [UIColor whiteColor].CGColor;
downLayer.cornerRadius = 2.5f;
[self.layer addSublayer:downLayer];

为此layer添加下述动画:

   /**
    progress持续延长  由于延长是由中心点到上下两边延长
    因此添加向下位移动画 使其看起来向单向下延伸
    @return 动画组
    */
     - (CAAnimationGroup *)progressDownAnimation
   {
       CABasicAnimation *scaleAnim = [CABasicAnimation animationWithKeyPath:@"bounds.size"];
       scaleAnim.toValue = [NSValue valueWithCGSize:(CGSize){1,CGRectGetWidth(self.frame)*_progress}];

       //进度条水面下降时 长度随之一起改变 并向下移
       CABasicAnimation *downAnim = [CABasicAnimation animationWithKeyPath:@"position.y"];
       downAnim.toValue = @((CGRectGetWidth(self.frame)*_progress)/2+3);
       downAnim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];

       CAAnimationGroup *group = [CAAnimationGroup animation];
       group.fillMode = kCAFillModeForwards;
       group.removedOnCompletion = NO;
       group.animations = @[scaleAnim,downAnim];
       return group;
   }

实现效果

下载过程中加速减速而变化indicator角度暂时想不到实现方法,有思路的朋友欢迎交流

代码放在github,如欢迎star

上一篇 下一篇

猜你喜欢

热点阅读