ios弧形进度条_ios 圆形进度条

今天产品要弄一个圆形的进度条

1532512706923.jpg

有很多开源的进度条不用,非要弄这种效果,就不吐槽了,还是想想怎么实现

废话就不多说了 直接上代码

#import

@interface RoundProgressView : UIView

/**进度条颜色*/

@property (strong, nonatomic) UIColor *progressColor;

/**dash pattern*/

@property (strong, nonatomic) NSArray *lineDashPattern;

/**进度Label字体*/

@property (strong, nonatomic) UIFont *progressFont;

- (void)updateProgress:(CGFloat)progress;

@end

#import "RoundProgressView.h"

#define kBorderWith 10

#define center CGPointMake(self.bounds.size.width / 2.0, self.bounds.size.height / 2.0)

@interface RoundProgressView()

@property (strong, nonatomic) CAShapeLayer *outLayer;

@property (strong, nonatomic) CAShapeLayer *progressLayer;

@property (strong, nonatomic) UILabel *progressLabel;

@end

@implementation RoundProgressView

/*

// Only override drawRect: if you perform custom drawing.

// An empty implementation adversely affects performance during animation.

- (void)drawRect:(CGRect)rect {

// Drawing code

}

*/

- (instancetype)initWithFrame:(CGRect)frame

{

self = [super initWithFrame:frame];

if (self) {

[self drawProgress];

}

return self;

}

-(void)drawProgress{

UIBezierPath *loopPath = [UIBezierPath bezierPathWithArcCenter:center radius:(self.bounds.size.width - kBorderWith)/ 2.0 startAngle:-M_PI_2 endAngle:M_PI * 3.0 / 2.0 clockwise:YES];

// 外圈

self.outLayer = [CAShapeLayer layer];

self.outLayer.strokeColor = [UIColor lightGrayColor].CGColor;

self.outLayer.lineWidth = kBorderWith;

self.outLayer.fillColor = [UIColor clearColor].CGColor;

self.outLayer.path = loopPath.CGPath;

[self.layer addSublayer:self.outLayer];

// 进度条

self.progressLayer = [CAShapeLayer layer];

self.progressLayer.fillColor = [UIColor clearColor].CGColor;

self.progressLayer.strokeColor = [UIColor blackColor].CGColor;

self.progressLayer.lineWidth = kBorderWith;

self.progressLayer.strokeStart = 0;

self.progressLayer.strokeEnd = 0;

self.progressLayer.path = loopPath.CGPath;

[self.layer addSublayer:self.progressLayer];

// 进度Label

self.progressLabel = [UILabel new];

self.progressLabel.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);

self.progressLabel.font = [UIFont systemFontOfSize:40];

self.progressLabel.textAlignment = NSTextAlignmentCenter;

[self addSubview:self.progressLabel];

}

- (void)updateProgress:(CGFloat)progress {

[CATransaction begin];

[CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];

[CATransaction setAnimationDuration:0.5];

self.progressLayer.strokeEnd = progress / 100.0;

[CATransaction commit];

self.progressLabel.text = [NSString stringWithFormat:@"%.0f",progress];

}

- (void)setLineDashPattern:(NSArray *)lineDashPattern

{

_lineDashPattern = lineDashPattern;

self.outLayer.lineDashPattern = lineDashPattern;

self.progressLayer.lineDashPattern = lineDashPattern;

}

- (void)setProgressColor:(UIColor *)progressColor

{

self.progressLayer.strokeColor = progressColor.CGColor;

self.progressLabel.textColor = progressColor;

}

- (void)setProgressFont:(UIFont *)progressFont

{

self.progressLabel.font = progressFont;

}

调用

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

self.progressView =[[RoundProgressView alloc]initWithFrame:CGRectMake((ScreenWidth - 200)/2, 100, 200, 200)];

self.progressView.backgroundColor = [UIColor yellowColor];

[self.progressView setProgressColor:[UIColor blueColor]];

self.progressView.lineDashPattern = @[@(8),@(5)];

self.progressView.progressFont = [UIFont systemFontOfSize:70];

[self.view addSubview:self.progressView];

}

- (void)viewDidAppear:(BOOL)animated

{

[super viewDidAppear:animated];

[self.progressView updateProgress:25];

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值