- 需求:异步下载网络图片
- 思想:
- 在子线程下载网络图片
- 下载图片的话拿到图片的url
- 由url拿到对应的二进制数据(网络中的数据传输通过二进制数据)
- 由二进制数据得到图片
- 回到主线程刷新界面
- 设置scrollView和imageView的大小等UI问题
- 在子线程下载网络图片
1 #import "DownloadImageViewController.h" 2 3 @interface DownloadImageViewController () 4 /** 5 滚动视图 6 */ 7 @property (nonatomic,strong) UIScrollView *scrollView; 8 9 /** 10 图片视图 11 */ 12 @property (nonatomic,strong) UIImageView *imageView; 13 @end 14 15 @implementation DownloadImageViewController 16 17 - (void)viewDidLoad { 18 [super viewDidLoad]; 19 20 [self performSelectorInBackground:@selector(downloadImage) withObject:nil]; 21 22 } 23 24 #pragma mark - 这个方法先于viewDidLoad调用 当view为nil的时候会调用这个方法 25 - (void)loadView{ 26 //创建滚动视图 27 self.scrollView = [[UIScrollView alloc]initWithFrame:[UIScreen mainScreen].bounds]; 28 self.scrollView.bounces = NO; 29 self.scrollView.backgroundColor = [UIColor cyanColor]; 30 //将滚动视图设置为根视图 31 self.view = self.scrollView; 32 33 //创建图片视图 34 self.imageView = [[UIImageView alloc]init]; 35 [self.view addSubview:self.imageView]; 36 37 } 38 39 /**********异步下载网络图片****************/ 40 - (void)downloadImage{ 41 //拿到地址的url 42 NSURL *url = [NSURL URLWithString:@"http://img.daimg.com/uploads/allimg/161005/1-161005114001.jpg"]; 43 //网络数据是以二进制的形式传送的 44 NSData *data = [NSData dataWithContentsOfURL:url]; 45 UIImage *image = [UIImage imageWithData:data]; 46 47 //回到主线程刷新UI 48 [self performSelectorOnMainThread:@selector(updateUIWithImage:) withObject:image waitUntilDone:NO]; 49 50 51 } 52 53 - (void)updateUIWithImage:(UIImage *)image{ 54 55 NSLog(@"updateUIWithImage"); 56 //设置图片视图 57 self.imageView.image = image; 58 //设置图片视图的大小和图片一样大 59 [self.imageView sizeToFit]; 60 //设置滚动的视图的滚动范围和图片一样大 61 self.scrollView.contentSize = image.size; 62 63 64 }