*未經(jīng)博主允許不得擅自轉(zhuǎn)載
*如轉(zhuǎn)載請(qǐng)標(biāo)明作者及出處
- 首先先引入幾個(gè)ASI必須的框架
圖1
- 2.引入頭文件
#import "ASIHTTPRequest.h" //ASI網(wǎng)絡(luò)請(qǐng)求
#import "ASINetworkQueue.h"http://ASI隊(duì)列
- 3屬性
@interface ViewController ()<ASIProgressDelegate>//此處代理為ProgressView(進(jìn)度條簽定)
@property (nonatomic, retain)ASIHTTPRequest *request;
@property (nonatomic, retain)ASINetworkQueue *netWorkQueue;
@property (nonatomic, retain)UIProgressView *progerssView;
@property (nonatomic, retain)UILabel *label;
@property (nonatomic, assign) BOOL select;
- 4創(chuàng)建一個(gè)hanldData
NSString *urlstring = @"http://hc25.aipai.com/user/656/20448656/6167672/card/25033081/card.mp4";
//初始化Documents路徑
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
//初始化臨時(shí)文件路徑
NSString *folderPath = [path stringByAppendingPathComponent:@"temp"];
//創(chuàng)建文件管理器
NSFileManager *fileManager = [NSFileManager defaultManager];
//判斷temp文件夾是否存在
BOOL fileExists = [fileManager fileExistsAtPath:folderPath];
if (!fileExists) {//如果不存在說(shuō)創(chuàng)建,因?yàn)橄螺d時(shí),不會(huì)自動(dòng)創(chuàng)建文件夾
[fileManager createDirectoryAtPath:folderPath withIntermediateDirectories:YES attributes:nil error:nil];
}
//設(shè)置下載路徑
self.request = [[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:urlstring]];
//設(shè)置ASIHTTPRequest代理
self.request.delegate = self;
// 設(shè)置文件路徑下文件夾的名字
NSString *fileName = [urlstring lastPathComponent];
//初始化保存ZIP文件路徑
NSString *Savepath = [path stringByAppendingPathComponent:fileName];
//初始化臨時(shí)文件路徑
NSString *tempPath = [path stringByAppendingPathComponent:@"linshi"];
//設(shè)置文件保存路徑
[self.request setDownloadDestinationPath:Savepath];
//設(shè)置臨時(shí)文件路徑
[self.request setTemporaryFileDownloadPath:tempPath];
//設(shè)置進(jìn)度條的代理,
[_request setDownloadProgressDelegate:self.progerssView];
// self.request.downloadProgressDelegate = self.progerssView;
//[self.request setShowAccurateProgress:YES];
//設(shè)置是是否支持?jǐn)帱c(diǎn)下載
[self.request setAllowResumeForFileDownloads:YES];
//添加到ASINetworkQueue隊(duì)列去下載
[self.netWorkQueue go];
[self.netWorkQueue addOperation:self.request];
[self.request setCompletionBlock:^{
NSLog(@"下載成功,文件保存到: %@",NSHomeDirectory());
}];
[self.request setFailedBlock:^{
NSLog(@"下載失敗");
}];
- 5.創(chuàng)建Button
- (void)creaeButton {
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self action:@selector(downloade:) forControlEvents:UIControlEventTouchUpInside];
button.frame = CGRectMake(100, 180, 80, 30);
[button setTitle:@"下載" forState:UIControlStateNormal];
[self.view addSubview:button];
}
- 6.實(shí)現(xiàn)Button點(diǎn)擊的方法
- (void)downloade:(UIButton *)sender {
if ((sender.selected =! sender.selected)) {
[sender setTitle:@"暫停" forState:UIControlStateNormal];
[self handleData];
} else {
[sender setTitle:@"下載" forState:UIControlStateNormal];
for (ASIHTTPRequest *request in [self.netWorkQueue operations]) {
//暫停的
[request clearDelegatesAndCancel];
}
}
}
- 7.進(jìn)度條ProgressView的創(chuàng)建
- (void)createProgerssView {
self.progerssView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault];
self.progerssView.frame = CGRectMake(50, 100, 200, 20);
[self.view addSubview:self.progerssView];
[_progerssView release];
// 通過(guò)KVO監(jiān)聽 progress值,達(dá)到監(jiān)聽進(jìn)圖條的目的
[self.progerssView addObserver:self forKeyPath:@"progress" options:NSKeyValueObservingOptionNew context:nil];
}
- 8.kvo監(jiān)聽進(jìn)度條
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object change:(NSDictionary<NSString *,id> *)change
context:(void *)context {
NSNumber *value = [change objectForKey:@"new"];
float progress = [value floatValue];
NSLog(@"%.1f%%",progress *100);
NSString *pro = [NSString stringWithFormat:@"%.1f%%",progress *100];
self.label.text = pro;
}
- 9.這是我們?cè)赩iewDidLoad方法中進(jìn)行調(diào)用
- (void)viewDidLoad {
[super viewDidLoad];
//ASINetworkQueue是NSOperationQueue子類批旺,
//iPhone 提供了 NSOperation 接口進(jìn)行任務(wù)對(duì)象的封裝影涉,而通過(guò)將任務(wù)對(duì)象加入到 NSOperationQueue 隊(duì)列.
//NSOperationQueue 隊(duì)列會(huì)分配線程進(jìn)行任務(wù)對(duì)象的執(zhí)行.
self.netWorkQueue = [ASINetworkQueue queue];
[self.netWorkQueue reset];
[self.netWorkQueue setShowAccurateProgress:YES];
// 設(shè)置請(qǐng)求的并發(fā)數(shù)
// self.netWorkQueue maxConcurrentOperationCount =
[self createProgerssView];
[self creatLabel];
[self creaeButton];
// Do any additional setup after loading the view, typically from a nib.
}