在开发中,我们会遇到实现加载进度的一个效果,那如何来实现呢?其实很简单,就是根据传入progress的大小来画弧,下面我们来一步步实现它。
原理:通过重绘来实现
步骤:
首先自定义UIView类
然后重写drawRect:方法,在方法中开始画这个进度条
1.获取view相关联的上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
2.描绘路径
关于iOS中角度问题,圆的最右边为0度,如果想从最上面开始画,则开始角度为-90度,self.progress
是自定义View里面添加的一个属性,通过外界不停的改变progress
的值,来实时的重绘。
CGPoint center = CGPointMake(rect.size.width / 2, rect.size.height / 2);
CGFloat radius = rect.size.width / 2;
CGFloat startAngle = -M_PI_2;
CGFloat endAngle = -M_PI_2 + M_PI * 2 * self.progress;
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES];
3.设置一些基本属性
CGContextSetLineWidth(ctx, 2);
[[UIColor greenColor] set];
4.添加路径到上下文
CGContextAddPath(ctx, path.CGPath);
5.通过上下文渲染实现效果
CGContextStrokePath(ctx);
注意一点,在progress setter方法中需要调[self setNeedsDisplay];
来实现重绘。