利使用CAShapeLayer、CAGradientLayer实现弧形曲线渐变色进度条

作者 : 开心源码 本文共2057个字,预计阅读时间需要6分钟 发布时间: 2022-05-11 共240人阅读

积满肯定条件获取某种勋章或者奖励 需要一个弧形的曲线来填充色展现完成进度 有需要这种效果的可以看看

效果图

曲线进度条渐进色动画.gif

方法

创立了两个CAShapeLayer topLayer和bottomLayer bottomLayer来绘制下面灰色弧形的完整部分(表示容量) topLayer使用来显示上层的渐变色弧形进度条(表示完成度)

/** 设置top弧形曲线渐变层 */- (void)gradient {        self.topLayer = [CAShapeLayer layer];    self.topLayer.lineWidth = layerWidth;    self.topLayer.lineCap = kCALineCapRound;    self.topLayer.fillColor = [UIColor clearColor].CGColor;    self.topLayer.strokeColor = [UIColor whiteColor].CGColor;    CAGradientLayer *gradient = [CAGradientLayer layer];    gradient.frame = CGRectMake(0,0,self.frame.size.width,self .frame.size.height);    gradient.colors = @[(id)[UIColor colorWithRed:1                                            green:178 / 255.0                                             blue:101 / 255.0                                            alpha:1].CGColor,                            (id)[UIColor colorWithRed:1                                                green:69 / 255.0                                                 blue:69 / 255.0                                                alpha:1].CGColor];//    [gradient setLocations:@[@0, @0.5, @1]];    gradient.startPoint = CGPointMake(0, 0);    gradient.endPoint = CGPointMake(1.0, 0);    self.topLayer.path = [self arcProgressPath];    [gradient setMask:self.topLayer];    [self.layer addSublayer:gradient];        [self setCurrentProgress:_progress];}//底部灰色曲线- (CAShapeLayer *)bottomLayer {    if (!_bottomLayer) {        _bottomLayer = [CAShapeLayer layer];        _bottomLayer.lineCap = kCALineCapRound;        _bottomLayer.lineWidth = layerWidth;        _bottomLayer.fillColor = [UIColor clearColor].CGColor;        UIColor *color = [UIColor colorWithRed:225.0 / 255.0                                         green:226.0 / 255.0                                          blue:230.0/255.0                                         alpha:1];        _bottomLayer.strokeColor = (self.bottomColor?self.bottomColor:color).CGColor;        _bottomLayer.path = [self arcProgressPath];                [self.layer addSublayer:_bottomLayer];    }    return _bottomLayer;}
设置弧形路径
//弧形路径- (CGPathRef)arcProgressPath{        CGPoint origin = CGPointMake(self.frame.size.width / 2, self.frame.size.height / 2  );    CGFloat radius = self.frame.size.width / 2 - layerWidth ;        UIBezierPath *progressPath = [UIBezierPath bezierPathWithArcCenter:origin                                                                radius:radius                                                            startAngle:- M_PI_4 * 5                                                              endAngle:M_PI_4                                                             clockwise:YES];    return progressPath.CGPath;}
设置渐进动画
- (void)setCurrentProgress:(CGFloat)progress {        CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];    animation.duration = 2;    self.topLayer.strokeEnd = progress;    [self.topLayer addAnimation:animation forKey:@"animationStrokeEnd"];    [CATransaction commit];    _progress = progress;}

demo 地址

LHAnimationDemo

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 利使用CAShapeLayer、CAGradientLayer实现弧形曲线渐变色进度条

发表回复