利使用CAShapeLayer、CAGradientLayer实现弧形曲线渐变色进度条
积满肯定条件获取某种勋章或者奖励 需要一个弧形的曲线来填充色展现完成进度 有需要这种效果的可以看看
效果图
曲线进度条渐进色动画.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实现弧形曲线渐变色进度条
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 利使用CAShapeLayer、CAGradientLayer实现弧形曲线渐变色进度条