1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > iOS 自定义控件 progressView(环形进度条)

iOS 自定义控件 progressView(环形进度条)

时间:2020-05-26 07:09:21

相关推荐

iOS 自定义控件 progressView(环形进度条)

转帖:/xiangzhang321/article/details/42688133

之前做项目的时候有用到环形进度条,先是在网上找了一下第三方控件,发现好用是好用,就是东西太多了,有点复杂,还不如自己写一个简单点适合自己用的。

先把自定义控件的效果图贴出来。

其实我写的这个控件很简单。索性就直接把源码贴出来吧。

.h文件的内容就是一些声明

#import<UIKit/UIKit.h>

@interfaceProgressView :UIView

//中心颜色

@property(strong,nonatomic)UIColor*centerColor;

//圆环背景色

@property(strong,nonatomic)UIColor*arcBackColor;

//圆环色

@property(strong,nonatomic)UIColor*arcFinishColor;

@property(strong,nonatomic)UIColor*arcUnfinishColor;

//百分比数值(0-1)

@property(assign,nonatomic)floatpercent;

//圆环宽度

@property(assign,nonatomic)floatwidth;

@end

.m文件里就是具体实现了

#import"ProgressView.h"

@implementationProgressView

- (id)initWithFrame:(CGRect)frame{

self= [superinitWithFrame:frame];

if(self) {

self.backgroundColor=ClearColor;

_percent=0;

_width=0;

}

returnself;

}

- (void)setPercent:(float)percent{

_percent= percent;

[selfsetNeedsDisplay];

}

- (void)drawRect:(CGRect)rect{

[selfaddArcBackColor];

[selfdrawArc];

[selfaddCenterBack];

[selfaddCenterLabel];

}

- (void)addArcBackColor{

CGColorRefcolor = (_arcBackColor==nil) ? [UIColorlightGrayColor].CGColor:_arcBackColor.CGColor;

CGContextRefcontextRef =UIGraphicsGetCurrentContext();

CGSizeviewSize =self.bounds.size;

CGPointcenter =CGPointMake(viewSize.width/2, viewSize.height/2);

// Draw the slices.

CGFloatradius = viewSize.width/2;

CGContextBeginPath(contextRef);

CGContextMoveToPoint(contextRef, center.x, center.y);

CGContextAddArc(contextRef, center.x, center.y, radius,0,2*M_PI,0);

CGContextSetFillColorWithColor(contextRef, color);

CGContextFillPath(contextRef);

}

- (void)drawArc{

if(_percent==0||_percent>1) {

return;

}

if(_percent==1) {

CGColorRefcolor = (_arcFinishColor==nil) ? [UIColorgreenColor].CGColor:_arcFinishColor.CGColor;

CGContextRefcontextRef =UIGraphicsGetCurrentContext();

CGSizeviewSize =self.bounds.size;

CGPointcenter =CGPointMake(viewSize.width/2, viewSize.height/2);

// Draw the slices.

CGFloatradius = viewSize.width/2;

CGContextBeginPath(contextRef);

CGContextMoveToPoint(contextRef, center.x, center.y);

CGContextAddArc(contextRef, center.x, center.y, radius,0,2*M_PI,0);

CGContextSetFillColorWithColor(contextRef, color);

CGContextFillPath(contextRef);

}else{

floatendAngle =2*M_PI*_percent;

CGColorRefcolor = (_arcUnfinishColor==nil) ? [UIColorblueColor].CGColor:_arcUnfinishColor.CGColor;

CGContextRefcontextRef =UIGraphicsGetCurrentContext();

CGSizeviewSize =self.bounds.size;

CGPointcenter =CGPointMake(viewSize.width/2, viewSize.height/2);

// Draw the slices.

CGFloatradius = viewSize.width/2;

CGContextBeginPath(contextRef);

CGContextMoveToPoint(contextRef, center.x, center.y);

CGContextAddArc(contextRef, center.x, center.y, radius,0,endAngle,0);

CGContextSetFillColorWithColor(contextRef, color);

CGContextFillPath(contextRef);

}

}

-(void)addCenterBack{

floatwidth = (_width==0) ?5:_width;

CGColorRefcolor = (_centerColor==nil) ? [UIColorwhiteColor].CGColor:_centerColor.CGColor;

CGContextRefcontextRef =UIGraphicsGetCurrentContext();

CGSizeviewSize =self.bounds.size;

CGPointcenter =CGPointMake(viewSize.width/2, viewSize.height/2);

// Draw the slices.

CGFloatradius = viewSize.width/2- width;

CGContextBeginPath(contextRef);

CGContextMoveToPoint(contextRef, center.x, center.y);

CGContextAddArc(contextRef, center.x, center.y, radius,0,2*M_PI,0);

CGContextSetFillColorWithColor(contextRef, color);

CGContextFillPath(contextRef);

}

- (void)addCenterLabel{

NSString*percent =@"";

floatfontSize =14;

UIColor*arcColor = [UIColorblueColor];

if(_percent==1) {

percent =@"100%";

fontSize =14;

arcColor = (_arcFinishColor==nil) ? [UIColorgreenColor] :_arcFinishColor;

}elseif(_percent<1&&_percent>=0){

fontSize =13;

arcColor = (_arcUnfinishColor==nil) ? [UIColorblueColor] :_arcUnfinishColor;

percent = [NSStringstringWithFormat:@"%0.2f%%",_percent*100];

}

CGSizeviewSize =self.bounds.size;

NSMutableParagraphStyle*paragraph = [[NSMutableParagraphStylealloc]init];

paragraph.alignment=NSTextAlignmentCenter;

NSDictionary*attributes = [NSDictionarydictionaryWithObjectsAndKeys:[UIFontboldSystemFontOfSize:fontSize],NSFontAttributeName,arcColor,NSForegroundColorAttributeName,[UIColorclearColor],NSBackgroundColorAttributeName,paragraph,NSParagraphStyleAttributeName,nil];

[percentdrawInRect:CGRectMake(5, (viewSize.height-fontSize)/2, viewSize.width-10, fontSize)withAttributes:attributes];

}

@end

具体的调用就是

ProgressView*progress = [[ProgressViewalloc]initWithFrame:CGRectMake(detil.width-65,10,60,60)];

progress.arcFinishColor=COLOR_STRING(@"#75AB33");

progress.arcUnfinishColor=COLOR_STRING(@"#0D6FAE");

progress.arcBackColor=COLOR_STRING(@"#EAEAEA");

progress.percent=1;

[detiladdSubview:progress];

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。