先上一下效果图
1.首先通过CAShapeLayer和贝塞尔曲线搭配的方法,创建出圆形进度条
先简单的介绍下CAShapeLayer
1,CAShapeLayer继承自CALayer,可使用CALayer的所有属性
2,CAShapeLayer需要和贝塞尔曲线配合使用才有意义。
Shape:形状
贝塞尔曲线可以为其提供形状,而单独使用CAShapeLayer是没有任何意义的。
3,使用CAShapeLayer与贝塞尔曲线可以实现不在view的DrawRect方法中画出一些想要的图形
关于CAShapeLayer和DrawRect的比较
DrawRect:DrawRect属于CoreGraphic框架,占用CPU,消耗性能大
CAShapeLayer:CAShapeLayer属于CoreAnimation框架,通过GPU来渲染图形,节省性能。动画渲染直接提交给手机GPU,不消耗内存
贝塞尔曲线与CAShapeLayer的关系
1,CAShapeLayer中shape代表形状的意思,所以需要形状才能生效
2,贝塞尔曲线可以创建基于矢量的路径
3,贝塞尔曲线给CAShapeLayer提供路径,CAShapeLayer在提供的路径中进行渲染。路径会闭环,所以绘制出了Shape
4,用于CAShapeLayer的贝塞尔曲线作为Path,其path是一个首尾相接的闭环的曲线,即使该贝塞尔曲线不是一个闭环的曲线
参考文章基于CAShapeLayer和贝塞尔曲线的圆形进度条动画【原创】 – IT985博客
2.为进度条实现颜色渐变
这里我们需要使用到CAGradientLayer,CAGradientLayer是一个用来画颜色渐变的层。我们先用CAGradientLayer做出渐变效果,然后把ShapeLayer作为GradientLayer的Mask来截取出需要的部分,以此达到渐变的进度条效果。
这里把层分为左半部分和右上部分和右下部分(自己决定怎么分区,也可以左右各一部分或者左右各两部分。推荐左右各一部分就行,因为颜色数组可以增加数量)
3.进度条、水波动画
进度条动画与头部原点动画一起执行
水波动画为 一张水波图片从顶部血像滑进了,导指定高度在执行CABasicAnimation动画
限于作者表达能力有限,技术说明也不多,如有纰漏,希望各位读者多多指正。
demo github下载地址:GitHub - coolegeMa/firstProgress