采用CAShapeLayer与UIBezierPath结合使用:
//声明全局属性
@property(nonatomic,strong) CAShapeLayer *shape;
@property(nonatomic,strong) CAShapeLayer *circle;
@property(nonatomic,strong)NSTimer *timer;
@property(nonatomic,assign)BOOL isStop;
@property(nonatomic,assign)CGFloat process;
//创建整体的视图
_shape = [CAShapeLayer layer];
_shape.cornerRadius = 5.0;
_shape.backgroundColor = [UIColor lightGrayColor].CGColor;
_shape.lineCap = kCALineCapRound;
_shape.bounds = CGRectMake(0, 0, 100, 100);
_shape.position = self.view.center;
UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(10, 10, 80, 80)];
_shape.strokeColor = [UIColor orangeColor].CGColor;
_shape.lineWidth = 0;
_shape.fillColor = [UIColor lightTextColor].CGColor;
_shape.path = path.CGPath;
[self.view.layer addSublayer:_shape];
_circle = [CAShapeLayer new];
_circle.bounds = CGRectMake(0, 0, 100, 100);
_circle.position = self.view.center;
_circle.fillColor = [UIColor lightGrayColor].CGColor;
CGPoint center = CGPointMake(50, 50);
UIBezierPath *cirP = [UIBezierPath bezierPathWithArcCenter:center radius:KRadious startAngle:0 endAngle:M_PI clockwise:YES];
[cirP addLineToPoint:center];
[cirP closePath];
_circle.path = cirP.CGPath;
[self.view.layer addSublayer:_circle];
_timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(animationStart) userInfo:nil repeats:YES];
[_timer fire];
//更新进度
- (void)animationStart {
if (_process > 0.98) {
_process = 0.01;
} else {
_process += 0.01;
}
CGPoint center = CGPointMake(50, 50);
CGFloat an = M_PI * 2 * _process - M_PI_2;
UIBezierPath *cirP = [UIBezierPath bezierPathWithArcCenter:center radius:KRadious startAngle:-M_PI_2 endAngle:an clockwise:NO];
[cirP addLineToPoint:center];
_circle.path = cirP.CGPath;
}
//暂停与继续的控制
if (_isStop) {
_isStop = NO;
_timer.fireDate = [NSDate distantPast];
} else {
_isStop = YES;
_timer.fireDate = [NSDate distantFuture];
}