美文网首页
iOS自定义加载进度条

iOS自定义加载进度条

作者: oldDevil | 来源:发表于2019-01-19 01:42 被阅读64次

    在开发中,我们会遇到实现加载进度的一个效果,那如何来实现呢?其实很简单,就是根据传入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自定义加载进度条

          本文链接:https://www.haomeiwen.com/subject/vhfadqtx.html