| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jopen
10年前发布

iOS网络编程使用代理方法 , 简化请求和响应

//在此之前要遵守协议<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;              }                }];        }