1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
| #import "ViewController.h" #import "DACircularProgressView.h"
@interface ViewController ()<NSURLConnectionDataDelegate> @property(nonatomic,strong) NSFileHandle *writeHandle; @property(nonatomic,assign) long long totalLength; @property(nonatomic,assign) long long currentLength;
@property(nonatomic,weak) DACircularProgressView *circleView; @property(nonatomic,strong) NSURLConnection *conn; @property (weak, nonatomic) IBOutlet UIButton *btn;
@end
@implementation ViewController
- (void)viewDidLoad { [super viewDidLoad]; DACircularProgressView *circleView=[[DACircularProgressView alloc]init]; circleView.frame=CGRectMake(120, 100, 100, 100); circleView.progressTintColor=[UIColor redColor]; circleView.trackTintColor=[UIColor orangeColor]; circleView.progress=0.01; [self.view addSubview:circleView]; self.circleView=circleView; } - (IBAction)downloadAndPause:(UIButton *)sender { //状态取反 sender.selected=!sender.isSelected; if (sender.selected) { //继续 NSLog(@"继续"); //1-URL NSURL *url=[NSURL URLWithString:@"http://localhost:8080//MJServer/resources/videos.zip"]; //2-请求 NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url]; //设置请求头 NSString *range=[NSString stringWithFormat:@"bytes=%lld-",self.currentLength]; [request setValue:range forHTTPHeaderField:@"Range"]; //3-下载 self.conn= [NSURLConnection connectionWithRequest:request delegate:self]; }else{ //暂停 NSLog(@"暂停"); [self.conn cancel]; self.conn=nil; } }
//-请求失败时调用(请求超时,网络异常) -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { NSLog(@"didFailWithError--"); } //-接收到服务器的响应聚会调用 -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { NSLog(@"didReceiveResponse--"); if (self.currentLength)return; //文件路径 NSString *caches=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject]; NSString *filePath=[caches stringByAppendingPathComponent:@"videos.zip"]; //创建一个空的文件到沙盒中 NSFileManager *mgr=[NSFileManager defaultManager]; [mgr createFileAtPath:filePath contents:nil attributes:nil]; //创建一个用来写数据的句柄 self.writeHandle=[NSFileHandle fileHandleForWritingAtPath:filePath]; //获得文件的总大小 self.totalLength=response.expectedContentLength;
} //当接收到服务器返回到实体数据时调用(具体内容,这个内容可被调用多次) -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { //移动到文件的最后面 [self.writeHandle seekToEndOfFile]; //写入数据到沙盒中 [self.writeHandle writeData:data]; self.currentLength+=data.length; NSLog(@"下载进度:%f",(double)self.currentLength/self.totalLength); self.circleView.progress=(double)self.currentLength/self.totalLength; } //加载完毕后调用(服务器的数据已经完全返回后) -(void)connectionDidFinishLoading:(NSURLConnection *)connection { NSLog(@"connectionDidFinishLoading--"); self.currentLength=0; self.totalLength=0; [self.btn setHidden:TRUE]; //关闭文件 [self.writeHandle closeFile]; self.writeHandle=nil; } @end
|