最近做项目的时候,射击狮设计了一个环形的进度条用来向用户呈现产品的信息,做完之后,感觉这个效果应该挺常用的,索性就整理一下了。
思路
分析了一下效果图,其实里面主要就三个主要元素,一个白色的半透明的背景圆环,姑且称之为A吧,一个橘黄色的进度圆环,称之为B,一个现实百分比的label
。圆环可以结合CAShapeLayer
和UIBezierPath
进行绘制,那么整过过程就很简单了。关于CAShapeLayer
官方的API可以查看这里。
过程
为了方便我把画笔的宽度,开始和结束的位置,背景颜色定义了宏,如下图
首先我们需要创建半透明白色背景的圆环A,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12
| - (void)initBackgroundView { UIBezierPath *path = [UIBezierPath bezierPath]; [path addArcWithCenter:center radius:radius startAngle:ChartStart endAngle:ChartEnd clockwise:YES]; bgCircleLayer = [CAShapeLayer layer]; bgCircleLayer.path = path.CGPath; bgCircleLayer.fillColor = [UIColor clearColor].CGColor; bgCircleLayer.strokeColor = BackGroundColor.CGColor; bgCircleLayer.lineWidth = ChartWidth; [self.layer addSublayer:bgCircleLayer]; }
|
为了每次方便地设置环形进度,我们在.h
文件中提供了一个方法:
1
| - (void)setProgress:(double)value animated:(BOOL)animate;
|
具体的实现如下:
1 2 3 4 5 6 7 8 9 10 11
| - (void)setProgress:(double)value animated:(BOOL)animate { NSAssert(value < 1 && value > 0, @"value是包含0、1之间的数值"); progress = value; animated = animate; radian = value * (2* M_PI - fabs(ChartStart - ChartEnd)); self.percentLB.text = [NSString stringWithFormat:@"%.0f%%",progress*100]; self.percentLB.center = [self percentCenter]; [self creatCircleLayer]; }
|
创建环形进度的方法- (void)creatCircleLayer
其实和环形的背景一样的,这里就不再贴代码了。
然后就是解决环形进度动画的问题了