繪製下載進度(Quartz2D)
1.思路分析
進度肯定是不停改變的,所以我們肯定需要定時器NSTimer操作,監聽Label控制元件進度文字的改變,從而來設計下載檢視的圓形
設計下載進度檢視,需要我們提供進度值 -> 來確定繪製圓的大小
2.實現
- 自定義DrawView檢視,用來繪製下載進度
// .h檔案
#import <UIKit/UIKit.h>
@interface DrawView : UIView
@property (nonatomic, assign) CGFloat value;
@end
// . m檔案
#import "DrawView.h"
@implementation DrawView
- (void)drawRect:(CGRect)rect {
// Drawing code
UIBezierPath *path = [[UIBezierPath alloc] init];
CGPoint center = CGPointMake(self.frame.size.width * 0.5, self.frame.size.height * 0.5);
CGFloat radius = self.frame.size.width * 0.5 - 5;
CGFloat startAngle = 0;
CGFloat endAngle = self.value / 100 * M_PI * 2;
[path addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES];
[path stroke];
}
@end
- 使用DrawView,實現下載進度動態顯示
#import "ViewController.h"
#import "DrawView.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *lableView;
@property (weak, nonatomic) IBOutlet DrawView *grayView;
@property (nonatomic, weak) NSTimer *timer;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.lableView.text = @"0.0%";
[self.lableView sizeToFit];
}
// 改變lable的文字,然後重繪灰色檢視上的進度條進度
- (void)change{
NSString *value = [self.lableView.text stringByReplacingOccurrencesOfString:@"%" withString:@""];
if ([value doubleValue] >= 100) {
[NSTimer initialize];
return;
}
CGFloat lastValue = [value doubleValue] + 1;
self.lableView.text = [NSString stringWithFormat:@"%.0f%%", lastValue];
[self.lableView sizeToFit];
// 重繪
self.grayView.value = lastValue;
// setNeedsDisplay方法會呼叫drawRect:方法,重繪灰色檢視上的進度條進度
[self.grayView setNeedsDisplay];
}
- (void)touchesBegan:(nonnull NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event{
// 建立定時器
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(change) userInfo:nil repeats:YES];
}
- (void)dealloc{
// 停止定時器
[NSTimer initialize];
}
@end
相關文章
- Vue canvas繪製圓形進度條動畫載入VueCanvas動畫
- 使用canvas繪製圓形進度條Canvas
- Python:用tqdm模組繪製進度條Python
- 繪製流程圖的軟體下載流程圖
- ajax進度條 非同步下載進度條非同步
- 製作遊戲載入進度條遊戲
- ftp下載顯示進度FTP
- 基於 D3.js 繪製動態進度條JS
- C# 下載帶進度條程式碼(普通進度條)C#
- 使用 canvas 繪製圖片,然後下載、上傳Canvas
- HttpWebChilent上傳與下載進度條HTTPWeb
- css3繪製百度度熊CSSS3
- Android下載檔案(一)下載進度&斷點續傳Android斷點
- Python展示檔案下載進度條Python
- 使用Retrofit+RxJava實現帶進度下載RxJava
- Retrofit2.0使用——帶進度下載檔案
- Android檔案下載之進度檢測Android
- iOS-OC-AFNetworking上傳和下載(回撥下載進度)iOS
- pyqt5的下載進度條 實現模板QT
- OSS實現檔案下載進度條顯示
- element plus下載進度增加遮罩層loading遮罩
- Android進階(五)View繪製流程AndroidView
- 專業圖示繪製 OmniGraffle Pro for mac正式啟用版下載Mac
- vue/js實現檔案流下載,檔案下載進度監聽VueJS
- Glide載入進度IDE
- 實現一個協程帶進度條下載器
- 仿魅族應用商店下載進度控制元件控制元件
- 【Android進階】RecyclerView之繪製流程(三)AndroidView
- canvas 繪製的圖片,進行上傳Canvas
- iOS之Quartz2DiOSquartz
- 百度地圖繪製多邊形區域地圖
- vue專案下載檔案,重新命名,監測進度。Vue
- 【CLI】使用 Curl 下載檔案實時進度條顯示
- 前端學習筆記:使用canvas繪製有圓角的百分比進度條前端筆記Canvas
- 安卓自定義View進階:繪製基本形狀安卓View
- Flutter自定義繪製(1)- 繪製基礎Flutter
- View的繪製二:View的繪製流程View
- 繪製流程