實(shí)現(xiàn)思路:
UIBezierPath勾勒輪廓,CAShapeLayer按照輪廓畫(huà)出形狀,CAGradientLayer做顏色漸變,讓CAShapeLayer做CAGradientLayer的遮罩mask,?
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic,strong) CAShapeLayer *shapLayer;
@property (nonatomic,strong) CAGradientLayer *gradientLayer;
@end
@implementation ViewController
- (void)viewDidLoad {
? ? [super viewDidLoad];
? ? // Do any additional setup after loading the view, typically from a nib.
? ? [self.gradientLayer setMask:self.shapLayer];
? ? [self.view.layer addSublayer:self.gradientLayer];
? ? [self drawCircleAnimation:self.shapLayer];
}
- (CAShapeLayer*)shapLayer{
? ? if(_shapLayer==nil) {
? ? ? ? CGSize size = self.view.bounds.size;
? ? ? ? UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(size.width/2, size.height/2) radius:size.width/2 - 1 startAngle:M_PI endAngle:M_PI * 2 clockwise:YES];
? ? ? ? _shapLayer= [CAShapeLayerlayer];
? ? ? ? _shapLayer.path= path.CGPath;
? ? ? ? _shapLayer.fillColor= [[UIColorclearColor]CGColor];
? ? ? ? _shapLayer.strokeColor= [[UIColorredColor]CGColor];
? ? ? ? _shapLayer.lineWidth=1;
? ? ? ? _shapLayer.lineCap = kCALineCapRound;
? ? }
? ? return _shapLayer;
}
- (CAGradientLayer*)gradientLayer{
? ? if (_gradientLayer == nil) {
? ? ? ? CGSize size = self.view.bounds.size;
? ? ? ? _gradientLayer = [CAGradientLayer layer];
? ? ? ? _gradientLayer.frame=CGRectMake(0,0, size.width, size.width);
? ? ? ? _gradientLayer.backgroundColor = [[UIColor grayColor] CGColor];
? ? ? ? _gradientLayer.colors = @[(__bridge id)[UIColor redColor].CGColor,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (__bridgeid)[UIColorgreenColor].CGColor,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (__bridgeid)[UIColoryellowColor].CGColor,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (__bridgeid)[UIColorblueColor].CGColor];
? ? ? ? _gradientLayer.locations? =@[@(0.2), @(0.4), @(0.6),@(0.8)];
? ? ? ? _gradientLayer.startPoint=CGPointMake(0,0);
? ? ? ? _gradientLayer.endPoint=CGPointMake(1,0);
? ? }
? ? return _gradientLayer;
}
- (void)drawCircleAnimation:(CALayer*)lay
{
? ? CABasicAnimation *baseAnimation=[CABasicAnimation animationWithKeyPath:@"strokeEnd"];
? ? baseAnimation.duration=5.0;
? ? baseAnimation.fromValue=[NSNumber numberWithInteger:0];
? ? baseAnimation.toValue=[NSNumber numberWithInteger:1.0];
? ? [layaddAnimation:baseAnimation forKey:@"circleKey"];
}
- (void)didReceiveMemoryWarning {
? ? [super didReceiveMemoryWarning];
? ? // Dispose of any resources that can be recreated.
}
@end