美文网首页
ios 渐变色圆弧进度条

ios 渐变色圆弧进度条

作者: 要成为灰太狼的男人 | 来源:发表于2018-05-03 16:35 被阅读0次
最近项目中有需求提出要写一个渐变色的进度条类似于这样的 D471F6E7-D8A5-4071-B8DE-7D27E9B533C4.png

经过一番折腾做了以下工具类:

@interface CNNProgressView : UIView {
    CAShapeLayer *_trackLayer;
    CAShapeLayer *_progressLayer;
    
    
    UIColor *_strokeColor;
}
-(void)setPercent:(CGFloat)percent animated:(BOOL)animated;
- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {        
        _strokeColor = UIColorFromRGB(0x797979);//背景圆环的颜色
        
        _trackLayer=[CAShapeLayer layer];
        _trackLayer.frame = self.bounds;
        [self.layer addSublayer:_trackLayer];
        
        _trackLayer.fillColor=[UIColor clearColor].CGColor;
        _trackLayer.strokeColor = _strokeColor.CGColor;
        _trackLayer.opacity = 1;//背景圆环的背景透明度
        _trackLayer.lineCap = kCALineCapButt;//这个参数主要是调整环型进度条边上是不圆角,主要有三个参数kCALineCapRound(圆角),kCALineCapButt(直角),kCALineCapSquare(这个参数设了跟直角一样)
        _trackLayer.lineWidth = PROGRESS_LINE_WIDTH;
        
        UIBezierPath *path=[UIBezierPath bezierPathWithArcCenter:CGPointMake(frame.size.width/2, frame.size.height/2) radius:PROGRESS_WIDTH - 4 startAngle:degreesToRadians(-240) endAngle:degreesToRadians(120) clockwise:YES];
        
        _trackLayer.path=[path CGPath];
        
        
        _progressLayer = [CAShapeLayer layer];
        _progressLayer.frame = self.bounds;
        _progressLayer.fillColor = [[UIColor clearColor] CGColor];
        _progressLayer.strokeColor = [UIColor orangeColor].CGColor;//这个一定不能用clearColor,然显示不出来
        _progressLayer.lineCap = kCALineCapButt;
        _progressLayer.lineWidth = PROGRESS_LINE_WIDTH;
        _progressLayer.path =[path CGPath];
        _progressLayer.strokeEnd = 0.0;
        
        CALayer *gradientLayer=[CALayer layer];
        
        CAGradientLayer *gradientLayer1=[CAGradientLayer layer];
        
        gradientLayer1.frame=CGRectMake(0, 0, self.bounds.size.width/2,  self.bounds.size.height);
        [gradientLayer1 setColors:[NSArray arrayWithObjects:(id)UIColorFromRGB(0x62ffff).CGColor,(id)[UIColorFromRGB(0xff5ab2) CGColor], nil]];
        
        //注意,要把这行注释掉,不然进度条位置偏移 显示不出来
        
        //[gradientLayer1 setLocations:@[@0.5,@0.9,@1]];
        [gradientLayer1 setStartPoint:CGPointMake(0.5, 0.2)];//调整颜色比例主要是调这两个参数(0-1之间)
        [gradientLayer1 setEndPoint:CGPointMake(0.5, 0.7)];//调整颜色比例主要是调这两个参数(0-1之间)
        [gradientLayer addSublayer:gradientLayer1];
                
        CAGradientLayer *gradientLayer2=[CAGradientLayer layer];
        
        //如果只需要两种颜色渐变,把下边的gradientLayer2 相关代码去掉就行
        
        gradientLayer2.frame=CGRectMake(self.bounds.size.width/2, 0,self.bounds.size.width/2 , self.bounds.size.height);
        [gradientLayer2 setColors:[NSArray arrayWithObjects:(id)UIColorFromRGB(0x62ffff).CGColor,(id)UIColorFromRGB(0xff5ab2).CGColor, nil]];
        
        //注意,要把这行注释掉,不然进度条位置偏移 显示不出来
        
        //[gradientLayer2 setLocations:@[@0.1,@0.5,@1]];
        [gradientLayer2 setStartPoint:CGPointMake(0.5,0.2)];//调整颜色比例主要是调这两个参数(0-1之间)
        [gradientLayer2 setEndPoint:CGPointMake(0.5, 0.7)];//调整颜色比例主要是调这两个参数(0-1之间)
        
        [gradientLayer addSublayer:gradientLayer2];
        
        [gradientLayer setMask:_progressLayer];
        
        [self.layer addSublayer:gradientLayer];
    }
    return self;
}

-(void)setPercent:(CGFloat)percent animated:(BOOL)animated{
    
    [CATransaction begin];
    [CATransaction setDisableActions:!animated];
    [CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
    [CATransaction setAnimationDuration:1];
    _progressLayer.strokeEnd = percent/360.0;
    
    [CATransaction commit];
}

相关文章

  • ios 渐变色圆弧进度条

    经过一番折腾做了以下工具类:

  • iOS 的颜色渐变圆弧

    iOS 的颜色渐变 实现一个圆弧进度条主要分为三步 一、画圆弧这里用的贝赛尔曲线,就是这个东西:UIBezierP...

  • iOS 知识点1--环形颜色渐变进度条3

    在iOS 知识点1--环形颜色渐变进度条2中讲解了如何给进度条添加动画。这一篇中讲一下环形进度条的进度条的渐变色处...

  • iOS 半圆弧进度条

    1.效果图 2.代码 .h .m 使用

  • 自定义 View 实战 04 - 圆形进度条

    圆形进度条分析: 圆 圆弧 进度值 所以这里我们先用 drawCircle画出圆,再使用drawArc画出圆弧(这...

  • iOS开发-绘制渐变色圆环(圆弧)

    前一段时间公司项目有个需求需要做一个圆弧形状的进度条,这个需求本来还算常见,但比较蛋疼的是颜色要求是渐变色的。通常...

  • ProgressView

    波浪,渐变色,进度条 GitHub:https://github.com/whde/ProgressView

  • 圆弧进度条

    已经很久没有写文章了,这次来说说环形进度条吧。 如上图所示,与设计稿还原度99%,本来想忽悠设计师用echars的...

  • iOS创建渐变色圆环

    需求 思路 用贝塞尔曲线来画圆淡黄色的一个圆弧,和表示进度的一条圆弧分开来画渐变色:找到进度圆弧的起点坐标和终点坐...

  • iOS 渐变色进度条

    - (void)gradentWith:(CGRect)frame{ // 创建path UIBezierPath...

网友评论

      本文标题:ios 渐变色圆弧进度条

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