iOS网络编程使用代理方法 , 简化请求和响应
2018-07-20 来源:open-open
//在此之前要遵守协议<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; } }]; }
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。
上一篇:C#压缩单个zip格式文件
下一篇: java 字符串系列化及反系列化
最新资讯
热门推荐