UI_图片异步下载

图片的异步下载

@property (retain, nonatomic) IBOutlet UIImageView *imageView;

//#pragma mark - 点击Button,获取图片数据
- (IBAction)buttonAction:(UIButton *)sender
{
    // 1. 准备URL
    NSURL *url = [NSURL URLWithString:kURL];
    // 2. 创建GET方式的请求对象
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setHTTPMethod:@"GET"];
    // 3. 创建异步的请求对象,使用Block方式
    __block ViewController *weakSelf = self;
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

        // 4. 将Data转为UIImage数据
        UIImage *image = [UIImage imageWithData:data];

        // 5. 显示
        weakSelf.imageView.image = image;
    }];
}

使用代理方法,封装image的传送 (不方便)

//#pragma mark - 点击Button,获取图片数据
- (IBAction)buttonAction:(UIButton *)sender
{


    // 直接使用类方法,发起网络图片数据的请求,并且还设置了delegate
    [ImageDownloader imageDownloaderWithURLStr:kURL delegate:self];


}
//#pragma mark - 当图片下载完毕之后,会执行此方法

- (void)imageDownloaderDidFinishDownloadImage:(UIImage *)image
{
    _image.imageView = image;
}

ImageDownloader.m

@protocol ImageDownloaderDelegate <NSObject>

@optional
// 当下载完图片之后,执行的代理方法
- (void)imageDownloaderDidFinishDownloadImage:(UIImage *)image;

@end

+ (void)imageDownloaderWithURLStr:(NSString *)urlStr
                         delegate:(id<ImageDownloaderDelegate>)delegate
{
    // 1. 根据地址获取网络数据
    NSURL *url = [NSURL URLWithString:urlStr];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setHTTPMethod:@"GET"];
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

        // 2. 得到图片数据
        UIImage *image = [UIImage imageWithData:data];

        // 3. 将图片数据传出去
        if (delegate != nil && [delegate respondsToSelector:@selector(imageDownloaderDidFinishDownloadImage:)]) {
            [delegate imageDownloaderDidFinishDownloadImage:image];
        }

    }];

}

使用Block方法,封装image的传送

// b1. 定义Block类型
typedef void (^Result) (UIImage *image);

@interface ImageDownloader : NSObject


// b2. 声明block作为参数的方法
+ (void)imageDownloaderWithURLStr:(NSString *)urlStr
                           result:(Result)result;
@end

// b3. 实现带有block参数的方法
+ (void)imageDownloaderWithURLStr:(NSString *)urlStr
                           result:(Result)result
{
    // b4. 根据地址获取图片数据
    NSURL *url = [NSURL URLWithString:urlStr];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setHTTPMethod:@"GET"];

    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        UIImage *image = [UIImage imageWithData:data];

        // b5. 传递数据(调用Block,把要传递的数据作为参数)
        result(image);
    }];    
}

//#pragma mark - 点击Button,获取图片数据
- (IBAction)buttonAction:(UIButton *)sender
{
    __block ViewController *weakSelf = self;
    [ImageDownloader imageDownloaderWithURLStr:kURL result:^(UIImage *image) {
        weakSelf.image.image = image;
    }];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值