iOS 圆环渐变色动画

作者: 兰州一碗面 | 来源:发表于2017-03-21 19:16 被阅读325次

先上图

Untitled1.gif

思路

1.自定义view,在- (void)drawRect:(CGRect)rect方法中用贝塞尔曲线画一个圆,设置中间的填充颜色为clear, 增加边框,设置边框的颜色。这样就有一个圆环了。
2.根据slider的值给圆环的终点动态赋值,就可以动起来了。
3.做渐变色。


主要代码

在.h文件中

@property (nonatomic , strong)UILabel *progressLabel;//*中间label*/

@property (nonatomic , assign)CGFloat progress;//*progress*/

在.m文件中

- (void)setProgress:(CGFloat)progress {
    _progress = progress;
    self.progressLayer.opacity = 0;
    [self setNeedsDisplay];
}

- (void)drawRect:(CGRect)rect {
    
    CGPoint center = CGPointMake(self.frame.size.width / 2, self.frame.size.height / 2);
    CGFloat radius = 90;
    CGFloat start  = - M_PI_2; //设置起点
    CGFloat end    = - M_PI_2 + M_PI * 2 * self.progress;//设置终点
    
    //画一个圆,填充色透明,设置边框带颜色,就是一个圆环
    self.progressLayer = [CAShapeLayer layer];
    self.progressLayer.frame = self.bounds;
    self.progressLayer.fillColor = [UIColor clearColor].CGColor; //填充颜色
    self.progressLayer.strokeColor = [UIColor greenColor].CGColor; //path填充的颜色,即圆环的颜色
    self.progressLayer.lineCap = kCALineCapRound;//线边缘是圆形
    self.progressLayer.lineWidth = 10;
    
    //用贝塞尔曲线画圆
    UIBezierPath *bezierPath = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:start endAngle:end clockwise:YES];
    self.progressLayer.path = [bezierPath CGPath];
    [self.layer addSublayer:self.progressLayer];
    
    //添加渐变色
    
    CALayer *layer = [CALayer layer];
    
    CAGradientLayer *rightLayer = [CAGradientLayer layer];
    rightLayer.frame = CGRectMake(self.frame.size.width / 2, 0, self.frame.size.width / 2, self.frame.size.height);
    rightLayer.locations = @[@0.1,@0.8,@1];
    rightLayer.colors = @[(id)[UIColor redColor].CGColor,(id)[UIColor yellowColor].CGColor,(id)[UIColor greenColor].CGColor];
    [layer addSublayer:rightLayer];
    
    CAGradientLayer *leftLayer = [CAGradientLayer layer];
    leftLayer.frame = CGRectMake(0, 0, self.frame.size.width / 2, self.frame.size.height);
    leftLayer.locations = @[@0.1,@0.8,@1];
    leftLayer.colors = @[(id)[UIColor redColor].CGColor,(id)[UIColor yellowColor].CGColor,(id)[UIColor greenColor].CGColor];
    [layer addSublayer:leftLayer];
    
    [layer setMask:self.progressLayer];
    [self.layer addSublayer:layer];
    
}

#pragma mark ----------- 懒加载 -----------

- (UILabel *)progressLabel {
    if (_progressLabel == nil) {
        _progressLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
        _progressLabel.center = CGPointMake(self.frame.size.width / 2, self.frame.size.height / 2);
        _progressLabel.textAlignment = NSTextAlignmentCenter;
        [self addSubview:_progressLabel];
    }
    return _progressLabel;
}

在viewController中

#import "ViewController.h"
#import "SSYCycleView.h"        //**自定义view*/

@interface ViewController ()

@property (nonatomic , strong)SSYCycleView *cycleView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    
    [self createUI];
    
}

- (void)createUI {
    [self.view addSubview:self.cycleView];
    
    UISlider *slider = [[UISlider alloc]initWithFrame:CGRectMake(self.cycleView.frame.origin.x - 20, self.cycleView.frame.origin.y + self.cycleView.frame.size.height + 50, self.cycleView.frame.size.width + 40, 20)];
    [self.view addSubview:slider];
    
    //添加方法
    [slider addTarget:self action:@selector(sliderChangeMethod:) forControlEvents:UIControlEventValueChanged];
}

- (void)sliderChangeMethod:(UISlider *)sender {
    self.cycleView.progressLabel.text = [NSString stringWithFormat:@"%.2f%%", sender.value*100];
    self.cycleView.progress = sender.value;
}

#pragma mark ----------- 懒加载 -----------

- (SSYCycleView *)cycleView {
    if (_cycleView == nil) {
        _cycleView = [[SSYCycleView alloc]initWithFrame:CGRectMake(90, 100, 200, 200)];
        _cycleView.backgroundColor = [UIColor whiteColor];
    }
    return _cycleView;
}

@end

链接点这里

Github链接

相关文章

  • iOS 圆环渐变色动画

    先上图 思路 1.自定义view,在- (void)drawRect:(CGRect)rect方法中用贝塞尔曲线画...

  • iOS创建渐变色圆环

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

  • iOS绘制渐变色圆环

    效果: 代码:

  • Android 圆形进度条控件

    自定义控件圆形进度条,支持顶部圆环渐变色,以及动画功能. 效果图 使用方式 核心代码 自定义属性 res/vasu...

  • iOS开发 渐变色圆环进度

    综合网上的一些资料,根据自己的需求做了一些整理下载地址:https://github.com/MYF0518/YF...

  • iOS 动态绘制渐变色圆环

    思路 画静态圆的方法有很多,例如UIBezierPath或者UIBezierPath + CAShapeLayer...

  • iOS探索圆环加载动画

    最近产品提出这样一个需求,如下图: deom地址

  • 渐变色圆环

    通过border-image来实现渐变色边框,但是border-image无法实现圆角,所以换一个思路:通过pad...

  • iOS源码博文集锦1

    精彩的iOS源码与博文,不容错过。 iOS精选源码 iOS一种弹出视图效果带动画 导航栏显示渐变色,类似qq一样 ...

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

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

网友评论

  • loushumei:大神,我学到了很多知识,感谢分享!!赞一个!
    兰州一碗面:@咸菜啊 你俩。。。。。。
  • 司马启奏:大神,我学到了很多知识,感谢分享!!赞一个!

本文标题:iOS 圆环渐变色动画

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