单军华
2018-07-12 3e8437ae559487362fae3525beb79c534c213a51
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
//
//  GradientProgressView.m
//  screendisplay
//
//  Created by 单军华 on 2018/7/10.
//  Copyright © 2018年 单军华. All rights reserved.
//
 
#import "GradientProgressView.h"
 
@interface GradientProgressView (){
    UIColor *_bgProgressColor;
    NSArray *_colorArr;
    CGFloat _progress;
}
 
@property (nonatomic, strong) CALayer *bgLayer;
@property (nonatomic, strong) CAGradientLayer *gradientLayer;
 
@end
 
@implementation GradientProgressView
 
- (void)setProgress:(CGFloat)progress {
    if (progress < 0) {
        _progress = 0;
    }
    if (progress > 1) {
        _progress = 1;
    }
    _progress = progress;
    [self updateProgressView];
}
 
- (void)setColorArr:(NSArray *)colorArr {
    if (colorArr.count >= 2) {
        _colorArr = colorArr;
    }else {
        NSLog(@">>>>>颜色数组个数小于2,显示默认颜色");
    }
}
 
- (void)updateProgressView {
    self.gradientLayer.bounds = CGRectMake(0, 0, self.frame.size.width * self.progress, self.frame.size.height);
    self.gradientLayer.colors = self.colorArr;
}
 
#pragma mark - init
 
/*从Xib创建对象时调用*/
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
    
    self = [super initWithCoder:aDecoder];
    if(self) {
        [self commonInit];
    }
    return self;
}
 
/*从代码创建对象时调用*/
- (instancetype)initWithFrame:(CGRect)frame{
    
    self = [super initWithFrame:frame];
    if(self) {
        [self commonInit];
    }
    return self;
}
 
- (void)commonInit{
    _colorArr = @[(id)HexColor(0xFDDF76).CGColor, (id)HexColor(0xFEBC19).CGColor];
    _progress = 0.65;
    _bgProgressColor = HexColor(0xf2f2f2);
}
 
-(void)drawRect:(CGRect)rect{
    
    if (!_bgLayer) {
        _bgLayer = [CALayer layer];
        //一般不用frame,因为不支持隐式动画
        _bgLayer.bounds = CGRectMake(0, 0, rect.size.width, rect.size.height);
        _bgLayer.anchorPoint = CGPointMake(0, 0);
        _bgLayer.backgroundColor = self.bgProgressColor.CGColor;
        //        _bgLayer.cornerRadius = rect.size.height / 2.;
        [self.layer addSublayer:_bgLayer];
    }
    if (!_gradientLayer) {
        _gradientLayer = [CAGradientLayer layer];
        _gradientLayer.bounds = CGRectMake(0, 0, rect.size.width * self.progress, rect.size.height);
        _gradientLayer.startPoint = CGPointMake(0, 0);
        _gradientLayer.endPoint = CGPointMake(1, 0);
        _gradientLayer.anchorPoint = CGPointMake(0, 0);
        NSArray *colorArr = self.colorArr;
        _gradientLayer.colors = colorArr;
        
        //_gradientLayer.cornerRadius = rect.size.height / 2.;
        [self.layer addSublayer:_gradientLayer];
    }
    //self.layer.cornerRadius = rect.size.height / 2.;
    self.clipsToBounds = YES;
}
 
@end