重繪-下載進度條(setNeedsDisplay)的步驟
- 布局控件:UISliderView,自定義view用來畫圓弧進度條,UILabel
功能一:UILabel的text值與UISliderView相關,監聽UISliderView的進度,顯示text值
-
功能二:圓弧進度條的長度與與UISliderView相關,監聽UISliderView的進度,顯示圓弧進度條
- 繪制圓弧
- 根據新進度值重新繪制圓弧
在progressView.m中
- (void)setProgress:(CGFloat)progress
{
_progress = progress;
// 每次獲取新進度后重繪
[self setNeedsDisplay];
}
- (void)drawRect:(CGRect)rect {
// Drawing code
CGPoint center = CGPointMake(rect.size.width * 0.5, rect.size.height * 0.5);
//- M_PI_2表示從12點鐘位置開始繪制
CGFloat endA = - M_PI_2 + M_PI * 2 * _progress;
// 圓弧
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:rect.size.width * 0.5 - 4 startAngle:-M_PI_2 endAngle:endA clockwise:YES];
[path stroke];
}
在vc.m中
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *labelView;
@property (weak, nonatomic) IBOutlet ProgressView *progressView;
@end
@implementation ViewController
//監控進度條UISliderView
- (IBAction)valueChange:(UISlider *)sender {
// 在@“”中轉義字符%% = %
_labelView.text = [NSString stringWithFormat:@"%.2f%%",sender.value * 100];
// 傳入下載進度
_progressView.progress = sender.value;
}