//
// ViewController.m
// 网络编程3
//
// Created by DC017 on 15/12/10.
// Copyright © 2015年 DC017. All rights reserved.
//
#pragma mark NSURLSession 学习
#import "ViewController.h"
@interface ViewController ()<NSURLSessionDownloadDelegate>
{
UITextField * textfield;
UIButton * xiazai;
UIButton * quxiao;
UIButton * zanting;
UIButton * huifu;
UILabel * label;
UIProgressView * progress;
NSURLSessionDownloadTask *downloadTask;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self layout];
// Do any additional setup after loading the view, typically from a nib.
}
//layout布局
-(void)layout{
textfield=[[UITextField alloc]initWithFrame:CGRectMake(20, 60, 300, 20)];
textfield.layer.borderWidth=1;
textfield.layer.borderColor=[UIColor redColor].CGColor;
textfield.text=@"http://b.zol-img.com.cn/desk/bizhi/image/5/2560x1600/1414029841427.jpg";
//设置圆角
textfield.layer.cornerRadius=4;
[self.view addSubview:textfield];
label=[[UILabel alloc]initWithFrame:CGRectMake(60, 200, 80, 20)];
label.textColor=[UIColor redColor];
[self.view addSubview:label];
progress =[[UIProgressView alloc]initWithFrame:CGRectMake(20, 100,300 ,5)];
[self.view addSubview:progress];
xiazai=[[UIButton alloc]initWithFrame:CGRectMake(20, 400, 60, 20)];
zanting=[[UIButton alloc]initWithFrame:CGRectMake(100, 400, 60, 20)];
huifu=[[UIButton alloc]initWithFrame:CGRectMake(180, 400, 60, 20)];
quxiao=[[UIButton alloc]initWithFrame:CGRectMake(260, 400, 60, 20)];
[xiazai setTitle:@"下载" forState:UIControlStateNormal];
[zanting setTitle:@"暂停" forState:UIControlStateNormal];
[huifu setTitle:@"恢复" forState:UIControlStateNormal];
[quxiao setTitle:@"取消" forState:UIControlStateNormal];
[xiazai setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[zanting setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[huifu setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[quxiao setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[xiazai addTarget:self action:@selector(xiazai) forControlEvents:UIControlEventTouchUpInside];
[zanting addTarget:self action:@selector(zanting) forControlEvents:UIControlEventTouchUpInside];
[huifu addTarget:self action:@selector(huifu) forControlEvents:UIControlEventTouchUpInside];
[quxiao addTarget:self action:@selector(quxiao) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:xiazai];
[self.view addSubview:zanting];
[self.view addSubview:huifu];
[self.view addSubview:quxiao];
}
-(void)xiazai{
NSLog(@"下载");
//创建url
NSString * strurl=textfield.text;
strurl =[strurl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]];
NSURL *url=[NSURL URLWithString:strurl];
//创建请求
NSURLRequest * request=[NSURLRequest requestWithURL:url];
//创建session 会话
//配置session(默认--单例)
NSURLSessionConfiguration * sessionConfig=[NSURLSessionConfiguration defaultSessionConfiguration];
sessionConfig.timeoutIntervalForRequest=10.0f;//请求时间
sessionConfig.allowsCellularAccess=YES;//是否允许蜂窝网络下载(2g,3g,4g)
//创建会话
NSURLSession *session=[NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil];//指定配置和代理
downloadTask =[session downloadTaskWithRequest:request];
[downloadTask resume];
}
-(void)zanting{
NSLog(@"暂停");
[downloadTask suspend];
[UIApplication sharedApplication].networkActivityIndicatorVisible=NO;
}
-(void)huifu{
NSLog(@"恢复");
[downloadTask resume];
if ([label.text isEqualToString:@""]) {
[UIApplication sharedApplication].networkActivityIndicatorVisible=YES;
}else{
[UIApplication sharedApplication].networkActivityIndicatorVisible=NO;
}
}
-(void)quxiao{
NSLog(@"取消");
progress.progress=0;
[downloadTask cancel];
[UIApplication sharedApplication].networkActivityIndicatorVisible=NO;
label.text=nil;
}
-(void)setjindutiaozhuangtai:(int64_t)zongliang setjindutiao:(int64_t)dangqianxiazailiang{
//异步
dispatch_async(dispatch_get_main_queue(), ^{
progress.progress=(float)dangqianxiazailiang/zongliang;
if (dangqianxiazailiang==zongliang) {
label.text=@"下载完成";
[UIApplication sharedApplication].networkActivityIndicatorVisible=NO;
}
else{
label.text=@"正在下载";
[UIApplication sharedApplication].networkActivityIndicatorVisible=YES;
}
});
}
#pragma mark 下载任务代理
#pragma mark 下载中()
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
didWriteData:(int64_t)bytesWritten
totalBytesWritten:(int64_t)totalBytesWritten
totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite{
[self setjindutiaozhuangtai:totalBytesExpectedToWrite setjindutiao:totalBytesWritten];
NSLog(@"bytesWritten: %lld totalBytesWritten:%lld totalBytesExpectedToWrite:%lld ",bytesWritten,totalBytesWritten,totalBytesExpectedToWrite);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark 下载完成
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
didFinishDownloadingToURL:(NSURL *)location{
NSString *path=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject];
path=[path stringByAppendingPathComponent:@"图片01.jpg"];
NSLog(@" 缓存路径 %@",path);
NSURL * saveUrl=[NSURL fileURLWithPath:path];
NSLog(@" %@",saveUrl);
//关键:复制文件,从location——》saveUrl
NSError * error;
[[NSFileManager defaultManager]copyItemAtURL:location toURL:saveUrl error:&error];
if (error) {
NSLog(@"错误:%@",error);
}
}
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error{
if (error) {
NSLog(@"%@",error);
}
}
@end
转载于:https://my.oschina.net/u/2483781/blog/542238