亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS實現帶動畫的環形進度條

2020-07-26 02:58:44
字體:
來源:轉載
供稿:網友

本篇寫的是實現環形進度條,并帶動畫效果,要實現這些,僅能通過自己畫一個

方法直接看代碼

為了方便多次調用,用繼承UIView的方式

.m文件

#import <UIKit/UIKit.h>@interface LoopProgressView : UIView@property (nonatomic, assign) CGFloat progress;@end

.h文件

NSTimer的調用并非精確,可以自行百度

 這里因為每0.01s啟動一次定時器,所以要同步進度條和數字,就將self.progress賦值給動畫的duration屬性就可以了,duration為動畫時間。

 在使用時我發現如果在tableviewcell中添加了這個環形進度條時有個缺點,就是定時器原本用的是系統的runloop,導致數據顯示滯后,所以現更新為子線程里添加定時器,子線程的定時器必須添加[[NSRunLoop currentRunLoop] run];才可啟動定時器,因為子線程的runloop里是不帶nstimer的,要手動添加運行。

#import "LoopProgressView.h"#import <QuartzCore/QuartzCore.h>#define ViewWidth self.frame.size.width //環形進度條的視圖寬度#define ProgressWidth 2.5   //環形進度條的圓環寬度#define Radius ViewWidth/2-ProgressWidth //環形進度條的半徑@interface LoopProgressView(){ CAShapeLayer *arcLayer; UILabel *label; NSTimer *progressTimer;}@property (nonatomic,assign)CGFloat i;@end@implementation LoopProgressView-(id)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { self.backgroundColor = [UIColor clearColor]; } return self;}-(void)drawRect:(CGRect)rect{ _i=0; CGContextRef progressContext = UIGraphicsGetCurrentContext(); CGContextSetLineWidth(progressContext, ProgressWidth); CGContextSetRGBStrokeColor(progressContext, 209.0/255.0, 209.0/255.0, 209.0/255.0, 1);  CGFloat xCenter = rect.size.width * 0.5; CGFloat yCenter = rect.size.height * 0.5;  //繪制環形進度條底框 CGContextAddArc(progressContext, xCenter, yCenter, Radius, 0, 2*M_PI, 0); CGContextDrawPath(progressContext, kCGPathStroke);  // //繪制環形進度環 CGFloat to = self.progress * M_PI * 2; // - M_PI * 0.5為改變初始位置  // 進度數字字號,可自己根據自己需要,從視圖大小去適配字體字號 int fontNum = ViewWidth/6; 49 label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0,Radius+10, ViewWidth/6)]; label.center = CGPointMake(xCenter, yCenter); label.textAlignment = NSTextAlignmentCenter; label.font = [UIFont boldSystemFontOfSize:fontNum]; label.text = @"0%"; [self addSubview:label];  UIBezierPath *path=[UIBezierPath bezierPath]; [path addArcWithCenter:CGPointMake(xCenter,yCenter) radius:Radius startAngle:0 endAngle:to clockwise:YES]; arcLayer=[CAShapeLayer layer]; arcLayer.path=path.CGPath;//46,169,230 arcLayer.fillColor = [UIColor clearColor].CGColor; arcLayer.strokeColor=[UIColor colorWithRed:227.0/255.0 green:91.0/255.0 blue:90.0/255.0 alpha:0.7].CGColor; arcLayer.lineWidth=ProgressWidth; arcLayer.backgroundColor = [UIColor blueColor].CGColor; [self.layer addSublayer:arcLayer];   dispatch_async(dispatch_get_global_queue(0, 0), ^{ [self drawLineAnimation:arcLayer]; });  if (self.progress > 1) { NSLog(@"傳入數值范圍為 0-1"); self.progress = 1; }else if (self.progress < 0){ NSLog(@"傳入數值范圍為 0-1"); self.progress = 0; return; }  if (self.progress > 0) { NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(newThread) object:nil]; [thread start]; } }-(void)newThread{ @autoreleasepool { progressTimer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(timeLabel) userInfo:nil repeats:YES]; [[NSRunLoop currentRunLoop] run]; }}//NSTimer不會精準調用-(void)timeLabel{ _i += 0.01; label.text = [NSString stringWithFormat:@"%.0f%%",_i*100];  if (_i >= self.progress) { [progressTimer invalidate]; progressTimer = nil;  } }//定義動畫過程-(void)drawLineAnimation:(CALayer*)layer{ CABasicAnimation *bas=[CABasicAnimation animationWithKeyPath:@"strokeEnd"]; bas.duration=self.progress;//動畫時間 bas.delegate=self; bas.fromValue=[NSNumber numberWithInteger:0]; bas.toValue=[NSNumber numberWithInteger:1]; [layer addAnimation:bas forKey:@"key"];}@end
 

完成后在要調用的控制器里,僅需幾段代碼:傳進的參數:為0-1

 LoopProgressView *custom = [[LoopProgressView alloc]initWithFrame:CGRectMake(50, 100, 100, 100)]; custom.progress = 0.44; [self.view addSubview:custom]; 

實現:

已經實現進度條和數字的同步:


以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品精品视频| 在线日韩av观看| 日本精品va在线观看| 97香蕉超级碰碰久久免费的优势| 欧美专区日韩视频| 2020久久国产精品| 日韩免费在线观看视频| www.日本久久久久com.| 久久影院模特热| 欧美午夜性色大片在线观看| 久久99久久99精品免观看粉嫩| 国产69精品久久久久久| 国产日韩综合一区二区性色av| 成人在线视频网| 久久精品人人做人人爽| 亚洲xxx视频| 91黑丝高跟在线| 日韩免费观看av| 97国产在线观看| 中文字幕日本精品| 欧美激情视频免费观看| 亚洲成人xxx| 韩国福利视频一区| 91网站在线看| 欧美激情视频三区| 亚洲va码欧洲m码| 亚洲男人天堂手机在线| 久久影院免费观看| 国产极品精品在线观看| 国产精品h在线观看| 国产亚洲欧美日韩一区二区| 欧美性xxxxxxx| 不卡av日日日| 亚洲国产欧美自拍| 欧美在线观看一区二区三区| 亚洲肉体裸体xxxx137| 国产91精品视频在线观看| 国产精品一区二区久久| 国产在线观看不卡| 精品欧美激情精品一区| 中文.日本.精品| 91久久久久久久久久久久久| 亚洲国产日韩欧美在线99| 2019亚洲日韩新视频| 国产精品久久久久久久久久久久久久| 日韩欧美国产网站| 亚洲国产精品久久| 久久99久久亚洲国产| 精品自在线视频| 亚洲国产成人精品女人久久久| 亚洲国产精品久久久久秋霞蜜臀| 亚洲人免费视频| 亚洲一区二区三区在线免费观看| 俺去亚洲欧洲欧美日韩| 亚洲三级av在线| 91网站免费看| 亚洲第一网站免费视频| 久久精品国产免费观看| 国产不卡在线观看| 麻豆国产va免费精品高清在线| 久久久精品在线| 亚洲毛片在线观看.| 国产精品久久久久久久9999| 69久久夜色精品国产69乱青草| 91久久精品国产91久久性色| 91精品国产91| 日韩电影在线观看免费| 久久成人精品视频| 亚洲在线第一页| 日韩精品小视频| 国产中文字幕亚洲| 亚洲石原莉奈一区二区在线观看| 久久综合网hezyo| 欧美区在线播放| 日韩精品在线观| 欧美国产视频日韩| 欧美影院在线播放| 国产精品久久久久久久久久久不卡| 亚洲福利视频久久| 国产精品吴梦梦| 亚洲片国产一区一级在线观看| 国产美女直播视频一区| 久久久精品影院| 国产精品久久视频| 亚洲国模精品私拍| 91精品久久久久久久久久久久久| 欧美三级免费观看| 日韩美女毛茸茸| 亚洲黄色av女优在线观看| 国产日产欧美a一级在线| 欧美一级大片视频| 国产中文字幕日韩| 欧美在线观看网址综合| 成人精品久久av网站| 成人精品久久久| 久久亚洲精品网站| 国产精品扒开腿做| 欧美老肥婆性猛交视频| 欧美成人午夜免费视在线看片| 国产脚交av在线一区二区| 在线观看成人黄色| 亚洲激情在线观看| 中国日韩欧美久久久久久久久| 国产精品网址在线| 在线成人免费网站| 精品视频www| 久久久久久九九九| 91免费观看网站| 日韩欧美一区视频| 国产精品都在这里| 日韩大陆毛片av| 久久综合伊人77777尤物| 色yeye香蕉凹凸一区二区av| 欧美一级高清免费| 久久久久国产视频| 视频在线一区二区| 亚洲电影成人av99爱色| 欧美成人h版在线观看| 国内揄拍国内精品少妇国语| 午夜精品一区二区三区在线播放| 久久成人这里只有精品| 亚洲色图国产精品| 免费91在线视频| 国产精品v片在线观看不卡| 亚洲人a成www在线影院| 欧美色视频日本版| 亚洲国产成人在线播放| 在线播放国产一区中文字幕剧情欧美| 亚洲一区二区三区久久| 一区二区三区国产在线观看| 久久久免费精品视频| 粉嫩av一区二区三区免费野| 韩国福利视频一区| 亚洲福利视频免费观看| 日韩欧美精品网址| 精品久久久国产精品999| 91精品久久久久久久| 日韩中文字幕不卡视频| 欧美国产精品人人做人人爱| 国产亚洲成av人片在线观看桃| 欧美精品福利在线| 亚洲人成伊人成综合网久久久| 97人人爽人人喊人人模波多| 国产精品1234| 国产玖玖精品视频| 一区二区在线视频播放| 日韩av资源在线播放| 久久久这里只有精品视频| 欧美精品videofree1080p| 欧美—级a级欧美特级ar全黄| 亚洲国产又黄又爽女人高潮的| 亚洲摸下面视频| 亚洲免费福利视频| 亚洲一区二区福利| 成人av.网址在线网站| 国产欧美一区二区三区视频| 午夜精品久久久久久久久久久久| 久久精品国产亚洲精品| 亚洲成人精品久久| 日韩专区中文字幕| 日韩福利视频在线观看| 久久91精品国产| 国产精品视频区1| 亚洲色图第一页|