@interface DrawProgressView:UIView
@property (nonatomic,strong) CAShapeLayer *progressLayer;
@property (nonatomic,strong) UIBezierPath *circlePath;
@property (nonatomic,assign) CGFloat progress;
@end
@implementation DrawProgressView
#define kAnimationDuration 0.25
-(void)setProgress:(CGFloat)progress{
if (!_progressLayer) {
UIBezierPath *circlePath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.width / 2, self.height / 2) radius:self.width /2 startAngle:-M_PI_2 endAngle:M_PI_2 * 3 clockwise:YES];
_circlePath = circlePath;
CAShapeLayer *bgLayer = [CAShapeLayer layer];
bgLayer.frame = self.bounds;
bgLayer.fillColor = [UIColor clearColor].CGColor;//填充色 - 透明色
bgLayer.lineWidth = 3.f;
bgLayer.strokeColor = ColorWithHex(0x1E8CD1).CGColor;//线条颜色
bgLayer.strokeStart = 0;
bgLayer.strokeEnd = 1;
bgLayer.lineCap = kCALineCapRound;
bgLayer.path = circlePath.CGPath;
[self.layer addSublayer:bgLayer];
_progressLayer = [CAShapeLayer layer];
_progressLayer.frame = self.bounds;
_progressLayer.fillColor = [[UIColor clearColor] CGColor];
_progressLayer.strokeColor=[UIColor redColor].CGColor;
_progressLayer.lineWidth = 3;
_progressLayer.lineCap = kCALineCapRound;
[self.layer addSublayer:_progressLayer];
}
CABasicAnimation *scaleAnimation=[CABasicAnimation animationWithKeyPath:@"strokeEnd"];
scaleAnimation.duration = kAnimationDuration;
scaleAnimation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
scaleAnimation.fromValue=[NSNumber numberWithFloat:_progress];
scaleAnimation.toValue=[NSNumber numberWithFloat:progress];
scaleAnimation.removedOnCompletion = NO;
scaleAnimation.fillMode = kCAFillModeForwards;
_progressLayer.path= _circlePath.CGPath;
[_progressLayer addAnimation:scaleAnimation forKey:@"strokeEndAnimation"];
_progress = progress;
}
@end
圆弧进度条 UIBezierPath + CABasicAnimation
最新推荐文章于 2021-12-11 15:04:34 发布