多线程:图片下载案例

//
//  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];
    [self performSelectorInBackground:@selector(downloadImage) withObject:nil];
}

- (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 {
    NSLog(@"%@",[NSThread currentThread]);
    // 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];

    // 要在主线程刷新UI
    // wait 参数 是否需要等待代码执行完之后,再执行往后的代码
    [self performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO];
    NSLog(@"end");
//    self.image = 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值