ios 渐变色环型进度条

#import "YSGradientProgressBarView.h"

 @interface YSGradientProgressBarView ()

 @property (nonatomic,strong) UIBezierPath *circlePath;
 @property (nonatomic,strong) CAShapeLayer *shapeLayer;
 @property (nonatomic,assign) CGFloat line_width;

@end

 @implementation YSGradientProgressBarView

  - (instancetype)initWithFrame:(CGRect)frame{

       if(self = [super initWithFrame:frame]){
         CGFloat kwRate = 1.0;
         BOOL isBigScreen = NO;
         if (ZYSWidth>375 && ZYSHeight>812) {
            isBigScreen = YES;
            kwRate = ZYSKWRate;
         }
        self.line_width = 8*kwRate;
        self.backgroundColor = [UIColor clearColor];
        UIBezierPath *circlePath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.frame.size.width/2, self.frame.size.height/2) radius:(self.frame.size.width - self.line_width)/2 startAngle:M_PI+M_PI/2  endAngle:M_PI*2+M_PI+M_PI/2 clockwise:YES];
        self.circlePath = circlePath;
    
        // 背景圆环
        CAShapeLayer *bgLayer = [CAShapeLayer layer];
        bgLayer.frame = self.bounds;
        bgLayer.fillColor = [ZYSColor(0xFFFFFF ) colorWithAlphaComponent:0.2].CGColor;//圆环中间填充色
        bgLayer.lineWidth = self.line_width;
        bgLayer.strokeColor = ZYSColor(0x1D242F).CGColor;//圆环颜色
        bgLayer.strokeStart = 0;
        bgLayer.strokeEnd = 1;
        bgLayer.lineCap = kCALineCapRound;
        bgLayer.path = self.circlePath.CGPath;
        [self.layer addSublayer:bgLayer];
}
    return self;
}


-(void)createGradientProgressBarWithColors:(NSArray*)colors{
     _shapeLayer = [CAShapeLayer layer];
     _shapeLayer.frame = self.bounds;
     _shapeLayer.fillColor = [UIColor clearColor].CGColor;
     _shapeLayer.lineWidth = self.line_width;
     _shapeLayer.lineCap = kCALineCapRound;
     _shapeLayer.strokeColor = [UIColor blueColor].CGColor;
     _shapeLayer.strokeStart = 0;
     _shapeLayer.strokeEnd = 1.0;
     _shapeLayer.path = self.circlePath.CGPath;
     [self.layer addSublayer:_shapeLayer];

     CAGradientLayer *gradientLayer = [CAGradientLayer layer];
     /** 从左到右的渐变色*/
     CAGradientLayer *leftGradientLayer = [CAGradientLayer layer];
     leftGradientLayer.frame = self.bounds;
     [leftGradientLayer setColors:colors];
     [leftGradientLayer setLocations:@[@(0.0),@(0.5f),@(1.0f)]];
     [leftGradientLayer setStartPoint:CGPointMake(0, 1)];
     [leftGradientLayer setEndPoint:CGPointMake(1, 1)];
     [gradientLayer addSublayer:leftGradientLayer];
     [gradientLayer setMask:_shapeLayer];
     gradientLayer.frame = self.bounds;
    [self.layer addSublayer:gradientLayer];
}

  -(void)setGradientBarWithProgress:(float)progress{
       self.shapeLayer.strokeEnd = progress;
  }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。