//在此之前要遵守协议<NSURLConnectionDataDelegate>
#import "ViewController.h"
#import "Cricl.h"
@interface ViewController (){
UITextField *_textField;
UIProgressView *_progressView;
UILabel *_label;
UIButton *_button;
Cricl *cricl;
long long _totalLength;
NSMutableData *_data;
UIImageView *imageOne;
UIImageView *imageTwo;
UIImageView *imageThree;
UIButton *buttonpause;
BOOL num;
NSTimer *timer;
}
@end
@implementation ViewController
- (void)viewDidLoad {
cricl = [[Cricl alloc]initWithFrame:CGRectMake(70,130, 375, 100)];
cricl.backgroundColor = [UIColor colorWithRed:0.8 green:0.9 blue:0.8 alpha:0];
imageOne = [[UIImageView alloc]initWithFrame:CGRectMake(20, 300, 160, 120)];
[self.view addSubview:imageOne];
imageTwo = [[UIImageView alloc]initWithFrame:CGRectMake(195, 300, 160, 120)];
[self.view addSubview:imageTwo];
imageThree = [[UIImageView alloc]init];
[self.view addSubview:cricl];
[super viewDidLoad];
[self layout];//页面布局
}
-(void)layout{
self.view.backgroundColor = [UIColor colorWithRed:0.8 green:0.9 blue:0.8 alpha:1];
//地址栏
_textField = [[UITextField alloc]initWithFrame:CGRectMake(10, 50, 355, 25)];
_textField.borderStyle = UITextBorderStyleRoundedRect;//文本框边框样式(圆弧)
_textField.text = @"http://i-7.vcimg.com/trim/f7a6fc6ebf36475798dd3bf726288d5988839/trim.jpg";
[self.view addSubview:_textField];
_label = [[UILabel alloc]initWithFrame:CGRectMake(10, 110, 80, 25)];
// _label.backgroundColor = [UIColor colorWithRed:0.8 green:0.9 blue:0.8 alpha:0.6];
_label.text = @"正在下载";
_label.font = [UIFont fontWithName:@"Arial" size:20];
[self.view addSubview:_label];
_progressView = [[UIProgressView alloc]initWithFrame:CGRectMake(30, 400, 335, 25)];
// [self.view addSubview:_progressView];
_button.layer.backgroundColor = [UIColor blackColor].CGColor;
_button = [[UIButton alloc]initWithFrame:CGRectMake(10, 500, 355, 25)];
[_button setTitle:@"下载" forState:UIControlStateNormal];
_button.backgroundColor = [UIColor colorWithRed:0.8 green:0.5 blue:0.7 alpha:0.6];
[_button addTarget:self action:@selector(choose) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:_button];
buttonpause = [[UIButton alloc]initWithFrame:CGRectMake(20, 600, 60, 25)];
buttonpause.backgroundColor = [UIColor colorWithRed:0.8 green:0.5 blue:0.7 alpha:0.6];
[buttonpause setTitle:@"暂停" forState:UIControlStateNormal];
[buttonpause addTarget:self action:@selector(okpause) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:buttonpause];
}
#pragma mark 更新进度条
-(void)updateProgress{
if(_data.length == _totalLength){
_label.text = @"下载完成";
}
else{
_label.text = @"正在下载";
}
cricl.value = (float)_data.length/_totalLength*2*M_PI;
}
#pragma mark 发送数据请求
-(void)choose{
NSLog(@"下载中...");
NSString *urlStr;
if(num){
urlStr= @"http://i-7.vcimg.com/trim/867a1fe997bf3baeebbd223ae9aecdc8142598/trim.jpg";
}
else{
urlStr=@"http://i-7.vcimg.com/trim/f7a6fc6ebf36475798dd3bf726288d5988839/trim.jpg";
}
//对于url中的中文是无法解析的,需要进行url编码
urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// urlStr = [urlStr stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSetURLQueryAllow]
//创建url链接
NSURL *url = [NSURL URLWithString:urlStr];
//创建请求request
NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15.0f];
//创建链接
NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
//启动连接
[connection start];
}
#pragma mark -开始代理方法
#pragma mark -开始响应
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
NSLog(@"接收响应");
_data = [[NSMutableData alloc]init];
//初始化,设置进度条进度
cricl.value = 0;
//处理响应
NSLog(@"%@",response);
//通过响应头中的content-Length取得整个响应的总长度
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
NSDictionary *HeaderFields = [httpResponse allHeaderFields];
NSLog(@"%@",HeaderFields);
_totalLength = [HeaderFields[@"Content-Length"] longLongValue];
// NSLog(@"%lld",_totalLength);
}
#pragma mark 接收响应数据
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
NSLog(@"接收响应数据");
[_data appendData:data];
//更新进度条
[self updateProgress];
}
#pragma mark 数据接收完成
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
NSLog(@"数据接收完成");
//数据接收完保存文件(注意苹果官方要求:下载数据智能保存到缓存目录)
NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSLog(@"%@",path);
path=[path stringByAppendingPathComponent:@"下载图片01.jpg"];
//保存下载内容
[_data writeToFile:path atomically:YES];
if(num){
imageOne.image = [UIImage imageWithData:_data];
num = NO;
}
else{
imageTwo.image = [UIImage imageWithData:_data];
num = YES;
}
timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(convert) userInfo:nil repeats:YES];
}
#pragma mark 请求失败
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
NSLog(@"请求失败:%@",error);
}
-(void)okpause{
[timer invalidate];
timer = nil;
}
-(void)convert{
NSDate *date = [[NSDate alloc]init];
imageThree.image = imageOne.image;
imageOne.image = imageTwo.image;
imageTwo.image = imageThree.image;
NSLog(@"%@",date);
}
#import "Cricl.h"
@implementation Cricl
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
[self drawArc:context];
}
-(void)setValue:(float)value{
_value = value;
[self setNeedsDisplay];
}
-(void)drawArc:(CGContextRef)context{
CGContextMoveToPoint(context, 220/2.0, 100/2.0);
[[UIColor redColor]set];
CGContextAddArc(context, 220/2.0, 100/2.0, 100/2.0, 0, _value, 0);
CGContextDrawPath(context, kCGPathFillStroke);
}
@end
//简化请求和响应
#import "ViewController.h"
@interface ViewController (){
UILabel *_label;
UIButton *_button;
UITextField *_field;
long long _totalLength;
UIImageView *imageOne;
UIImageView *imageTwo;
BOOL num;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self layout];
}
-(void)layout{
imageOne =[[UIImageView alloc]initWithFrame:CGRectMake(20, 300, 100, 100)];
[self.view addSubview:imageOne];
imageTwo = [[UIImageView alloc]initWithFrame:CGRectMake(150, 300, 100, 100)];
[self.view addSubview:imageTwo];
_field = [[UITextField alloc]initWithFrame:CGRectMake(10, 50, 355, 25)];
_field.borderStyle = UITextBorderStyleRoundedRect;
_field.text = @"http://5.26923.com/download/pic/000/328/ba80a24af0d5aba07e1461eca71f9502.jpg";
[self.view addSubview:_field];
_label = [[UILabel alloc]initWithFrame:CGRectMake(10, 90, 100, 25)];
_label.text = @"图片";
[self.view addSubview:_label];
_button = [[UIButton alloc]initWithFrame:CGRectMake(10,500, 355, 25)];
_button.backgroundColor = [UIColor colorWithRed:0.8 green:0.9 blue:0.8 alpha:0.6];
[_button setTitle:@"正在下载" forState:UIControlStateNormal];
[_button addTarget:self action:@selector(sendRequst) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:_button];
}
-(void)sendRequst{
//发送网址,并将其转换成utf8网络字节序
NSString *urlStr = _field.text;
NSLog(@"xxxx%@",urlStr);
urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//连接与网络
NSURL *url = [NSURL URLWithString:urlStr];
//发送请求和网络
NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0f];
//同步所表示文件原件的发送必须到达才可执行下一步,异步可以进行后台
//发送异步请求
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSLog(@"%@",path);
path = [path stringByAppendingPathComponent:@"图片01.jpg"];
[data writeToFile:path atomically:YES];
NSLog(@"%i",num);
if(num){
imageOne.image = [UIImage imageWithData:data];
num = NO;
}else{
imageTwo.image = [UIImage imageWithData:data];
num= YES;
}
}];
}