您的位置:首页 > 其它

多线程:图片下载案例

2016-03-25 23:23 337 查看
//
//  ViewController.m
//  08-图片下载
//
//  Created by gzxzmac on 16/1/28.
//  Copyright © 2016年 gzxzmac. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()<UIScrollViewDelegate>
@property (nonatomic, strong) UIScrollView *scrollView; // 滚动视图
@property (nonatomic, strong) UIImageView *imageView;// 显示图片的视图
@property (nonatomic, strong) UIImage *image; // 保存下载完的图片
@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
[self setupView];
[self downloadImage];
}

- (void)setupView {
// 初始化滚动视图
UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:self.view.bounds];
// 设置缩放系数
scrollView.minimumZoomScale = 0.3;

scrollView.delegate = self;

[self.view addSubview:scrollView];

// 被始化图片视图
UIImageView *imageView = [[UIImageView alloc]init];

[scrollView addSubview:imageView];

self.scrollView = scrollView;
self.imageView = imageView;
}

/*
1. 网络请求是耗时操作,需要放到子线程
2. 刷新UI 必须回到主线程
*/

// 如果网速足够慢,下载时间会很长
- (void)downloadImage {
// 要把耗时操作放到子线程中执行
dispatch_async(dispatch_get_global_queue(0, 0), ^{
// URL
NSURL *url = [NSURL URLWithString:@"http://e.hiphotos.baidu.com/zhidao/pic/item/0bd162d9f2d3572cf556972e8f13632763d0c388.jpg"];
// 接收二进制数据
NSData *data = [NSData dataWithContentsOfURL:url];

// 转换成图片
UIImage *image = [UIImage imageWithData:data];
// 回到主线程
dispatch_sync(dispatch_get_main_queue(), ^{
// 刷新UI
[self setImage:image];
});
});
}

- (void)setImage:(UIImage *)image {
NSLog(@"%@",[NSThread currentThread]);
_image = image;
self.imageView.image = image;
// 显示图片原来的大小
[self.imageView sizeToFit];
// 设置滚动内容区域
self.scrollView.contentSize = image.size;
}

// 返回一个要缩放的view
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
return self.imageView;
}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: