IOS開發之——繪製下載進度(74)
阿新 • • 發佈:2021-01-10
一 概述
本文介紹拖動Slider時,通過自定義View
- Label顯示當前的Slider的數字大小
- Progress顯示Sliderder的弧度
二 繪製進度
2.1 自定義ProgressView
設定要改變的值progress(ProgressView.h)
@interface ProgressView : UIView
@property (nonatomic,assign) CGFloat progress;
@end
Label和弧度顯示
#import "ProgressView.h" @interface ProgressView () @property (nonatomic,weak) UILabel *label; @end @implementation ProgressView - (UILabel *)label { if (_label==nil) { UILabel *label=[[UILabel alloc]initWithFrame:CGRectMake(0, 0, 100, 100)]; label.textAlignment=NSTextAlignmentCenter; [self addSubview: label]; _label=label; } return _label; } - (void)setProgress:(CGFloat)progress { _progress=progress; self.label.text=[NSString stringWithFormat:@"%.2f%%",progress*100]; [self setNeedsDisplay]; } // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. - (void)drawRect:(CGRect)rect { // Drawing code //1.獲取上下文 CGContextRef ctx=UIGraphicsGetCurrentContext(); //2.拼接路徑 CGPoint center=CGPointMake(50, 50); CGFloat radius=50-2; CGFloat startA=-M_PI_2; CGFloat endA=-M_PI_2+_progress*M_PI*2; UIBezierPath *path=[UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startA endAngle:endA clockwise:YES]; //3.把路徑新增到上下文 CGContextAddPath(ctx, path.CGPath); //4.把上下文渲染到檢視 CGContextStrokePath(ctx); } @end
2.2 ViewController中設定Slider改變
#import "ViewController.h" #import "ProgressView.h" @interface ViewController () @property (weak, nonatomic) IBOutlet ProgressView *progressView; @end @implementation ViewController - (IBAction)valueChange:(UISlider *)sender { _progressView.progress=sender.value; NSLog(@"%f",sender.value); } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. } @end