设计一个进度条

作品链接:http://www.jianshu.com/users/1e0f5e6f73f6/top_articles

  • 1.自定义一个UIView的子类
// 提供一个成员属性,接收下载进度值
@property (nonatomic, assign) CGFloat progress;
  • 2.重写成员属性的progress的setter
// 改变成员属性progress的属性的值,就会调用它的setter
-(void)setProgress:(CGFloat)progress{
_progress = progress;
//  当下载进度改变时,就会调用重绘方法
[self setNeedsDisplay];
} 
  • 3.重写
-(void)drawRect:(CGRect)rect
{
   // 设置圆弧的半径
   CGFloat radius = rect.size.width * 0.5;
  // 设置圆弧的圆心 
  CGPoint center = CGPointMake(radius, radius);
  //设置圆弧的开始的角度
  CGFloat startAngle = - M_PI_2;
 // 设置圆弧的终止角度
 CGFloat endAngle = - M_PI_2 + 2 * M_PI * self.progress;
//使用 UIBezierPath类绘制圆弧
   UIBezierPath *path =[UIBezierPathbezierPathWithArcCenter:centerradius:radius - 2  startAngle:startAngle endAngle:endAngleclockwise:YES];
//将绘制的圆弧渲染到图层(即显示出来)
 [path stroke];
} 

推荐阅读更多精彩内容