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
| - (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { CAShapeLayer *shapeLayer = [CAShapeLayer layer]; shapeLayer.path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.frame.size.width * 0.5, self.frame.size.height * 0.5 + 110) radius:120 startAngle:(150.f * M_PI) / 180.f endAngle:(390.f * M_PI) / 180.f clockwise:1].CGPath; shapeLayer.fillColor = [UIColor clearColor].CGColor; shapeLayer.strokeColor = [UIColor lightGrayColor].CGColor; shapeLayer.lineWidth = 15.f; shapeLayer.lineCap = kCALineCapRound; shapeLayer.opacity = 0.8; _shapeLayer = shapeLayer; CAGradientLayer *gradientLayer1 = [CAGradientLayer layer]; gradientLayer1.frame = self.frame; gradientLayer1.colors = self.colorsTop; gradientLayer1.startPoint = CGPointMake(0, 0); gradientLayer1.endPoint = CGPointMake(1, 0); gradientLayer1.mask = shapeLayer; CAGradientLayer *gradientLayer2 = [CAGradientLayer layer]; gradientLayer2.frame = CGRectMake(0, SHEIGHT / 2.f + circleRadius / 3.f , SWIDTH / 2, circleRadius * 1.3); gradientLayer2.colors = self.colorsLeftBottom; gradientLayer2.startPoint = CGPointMake(0, 1); gradientLayer2.endPoint = CGPointMake(0, 0); CAGradientLayer *gradientLayer3 = [CAGradientLayer layer]; gradientLayer3.frame = CGRectMake(SWIDTH / 2, SHEIGHT / 2.f + circleRadius / 3.f , SWIDTH / 2, circleRadius * 1.3); gradientLayer3.colors = self.colorsRightBottom; gradientLayer3.startPoint = CGPointMake(0, 0); gradientLayer3.endPoint = CGPointMake(0, 1); [self.layer addSublayer:gradientLayer1]; [gradientLayer1 addSublayer:gradientLayer2]; [gradientLayer1 addSublayer:gradientLayer3]; [gradientLayer1 setLocations:@[@0.35,@0.5,@0.75]]; [gradientLayer3 setLocations:@[@0.2,@0.5,@0.75]]; [gradientLayer2 setLocations:@[@0.2,@0.5,@0.75]]; } return self; }
- (NSMutableArray *)colorsTop { if (!_colorsTop) { _colorsTop = [NSMutableArray array]; [_colorsTop addObject:(__bridge id)RGB(0xe2, 0xf2, 0x69).CGColor]; [_colorsTop addObject:(__bridge id)RGB(0xff, 0xcf, 0x57).CGColor]; [_colorsTop addObject:(__bridge id)RGB(0xff, 0xa8, 0x4c).CGColor]; } return _colorsTop; }
- (NSMutableArray *)colorsLeftBottom { if (!_colorsLeftBottom) { _colorsLeftBottom = [NSMutableArray array]; [_colorsLeftBottom addObject:(__bridge id)RGB(0x73, 0xf2, 0x92).CGColor]; [_colorsLeftBottom addObject:(__bridge id)RGB(0xab, 0xf2, 0x6e).CGColor]; [_colorsLeftBottom addObject:(__bridge id)RGB(0xe2, 0xf2, 0x69).CGColor]; } return _colorsLeftBottom; }
- (NSMutableArray *)colorsRightBottom { if (!_colorsRightBottom) { _colorsRightBottom = [NSMutableArray array]; [_colorsRightBottom addObject:(__bridge id)RGB(0xff, 0xa8, 0x4c).CGColor]; [_colorsRightBottom addObject:(__bridge id)RGB(0xff, 0x80, 0x4c).CGColor]; [_colorsRightBottom addObject:(__bridge id)RGB(0xe2, 0x56, 0x4c).CGColor]; } return _colorsRightBottom; }
- (void)setPercent:(CGFloat)percent {
CGFloat value = percent / 200.f; _shapeLayer.strokeStart = MIN(0, value); _shapeLayer.strokeEnd = MAX(0, value); }
|