简单的用CAShapeLayer画个圈

首先看一下效果图:


    UIBezierPath *bezierPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.bounds.size.width / 2, self.bounds.size.width / 2) radius:RADIUS startAngle:M_PI_4 / 2 endAngle:M_PI * 2 - M_PI_4 / 2 clockwise:YES];
    self.progressLayer = [CAShapeLayer layer];
    self.progressLayer.frame = self.bounds;
    self.progressLayer.path = bezierPath.CGPath;
    self.progressLayer.strokeColor = [UIColor blackColor].CGColor;
    self.progressLayer.fillColor = [UIColor clearColor].CGColor;
    self.progressLayer.lineCap = kCALineCapRound;
    self.progressLayer.lineWidth = LINE_WIDTH;
    self.progressLayer.strokeStart = 0;
    self.progressLayer.speed = 0.1;
    [self.layer addSublayer:self.progressLayer];
    
    self.gradentLayer = [CAGradientLayer layer];
    self.gradentLayer.colors = @[
                                 (id)[UIColor redColor].CGColor,
                                 (id)[UIColor blueColor].CGColor,
                                 ];
    self.gradentLayer.frame = self.bounds;
    self.gradentLayer.locations = @[@0.1, @0.9];
    self.gradentLayer.startPoint = CGPointMake(0.5, 0);
    self.gradentLayer.endPoint = CGPointMake(0.5, 1);
    
    [self.gradentLayer setMask:self.progressLayer];
    [self.layer addSublayer:self.gradentLayer];
    
这里只需要两个图层。一个CAShapeLayer和一个CAGradientLayer对象。通过贝塞尔曲线画一个圆,并设置为shapeLayer的path。strokeColor表示填充颜色,fillColor表示边界的颜色。linewidth表示线宽。这里主要要设置起始点,这里区间为【0, 1】。

颜色渐变的效果需要依赖于gradientLayer。

其中colors属性是一个数组,里面存放的颜色,也就是需要渐变的颜色。

startPoint,endPoint (0,0)表示左上方开始,(0,1)表示右下方。默认值分别是(0.5,0),(0.5,1)。

locations表示区间分布。例如0.1,0.9之间的区间就是红蓝色渐变区间。

这里需要注意的是gradientLayer需要调用setMask方法,否则是整个视图在渐变,而不是想要的进度条。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值