iOS自定义加载进度条

在开发中,我们会遇到实现加载进度的一个效果,那如何来实现呢?其实很简单,就是根据传入progress的大小来画弧,下面我们来一步步实现它。

原理:通过重绘来实现

步骤:

首先自定义UIView类


自定义ProgressView类

然后重写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];来实现重绘。

效果图

Demo地址:https://github.com/olddevil/progress.git

你可能感兴趣的:(iOS自定义加载进度条)