#import <UIKit/UIKit.h>
@interface PKProgressView : UIView
@property (assign, nonatomic) CGFloat progress;
@end
static const CGFloat defaultThick = 3.f;
static const CGFloat defaultFontSize = 12.f;
static const CGFloat startAngle = - M_PI_2;
@interface PKProgressView ()
@property (assign, nonatomic) CGFloat thick;
@property (assign, nonatomic) CGFloat fontSize;
@property (strong, nonatomic) UIColor *circleColor;
@property (strong, nonatomic) UIColor *textColor;
@property (nonatomic, strong) UILabel *textLabel;
@end
@implementation PKProgressView
#pragma mark - life cycle
-(instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self initDefaultStyle];
}
return self;
}
- (void)initDefaultStyle
{
self.backgroundColor = [UIColor clearColor];
self.textColor = [UIColor greenColor];
self.circleColor = [UIColor greenColor];
self.thick = defaultThick;
[self addSubview:self.textLabel];
}
-(void)drawRect:(CGRect)rect
{
UIBezierPath *path = [UIBezierPath bezierPath];
path.lineWidth = self.thick;
[self.circleColor set];
path.lineCapStyle = kCGLineCapRound;
path.lineJoinStyle = kCGLineJoinRound;
CGFloat radius = (MIN(rect.size.width, rect.size.height) - self.thick ) / 2.0;
CGPoint center = {rect.size.width * 0.5,rect.size.height * 0.5};
[path addArcWithCenter:center radius:radius startAngle:startAngle endAngle:(startAngle + M_PI * 2 * _progress) clockwise:YES];
[path stroke];
}
#pragma mark - setter
-(void)setProgress:(CGFloat)progress
{
_progress = progress;
self.textLabel.text = [NSString stringWithFormat:@"%.f%%",(progress * 100)];
[self setNeedsDisplay];
}
#pragma mark - getter
-(UILabel *)textLabel
{
if (!_textLabel) {
_textLabel = [[UILabel alloc] initWithFrame:self.bounds];
_textLabel.textColor = self.textColor;
_textLabel.font = [UIFont systemFontOfSize:defaultFontSize];
_textLabel.textAlignment = NSTextAlignmentCenter;
}
return _textLabel;
}
@end