异步下载图片(自定义)

来源:互联网 发布:飞鸟淘宝客学习 编辑:程序博客网 时间:2024/06/02 02:44

自定义imageDownLoad类  和 第三方类库SDWebImage


一、第三方类库SDWebImage

导入SDWebImage包后

#import "UIImageView+WebCache.h"

一句话 在imageview对象发消息

[imageView sd_setImageWithURL:[NSURLURLWithString:@"string"]placeholderImage:niloptions:SDWebImageRetryFailed];


二、自定义imageDownLoad类

初始化传入下载图片的url字符串 

写一个方法实现下载功能  

自定义协议 让调用的类遵守  最后在接受数据完后回到主线程的指定方法里 通过代理将值uiimage传过去

.h文件

#import <Foundation/Foundation.h>

#import <UIKit/UIKit.h>


@protocol ImageDownLoadDelegate <NSObject>

-(void)imageDidFinishDownLoadWithImage:(UIImage *)image;

@end


.m文件

@interface ImageDownLoad :NSObject


@property(weak,nonatomic)id<ImageDownLoadDelegate>delegate;


-(instancetype)initWithDownLoadURLString:(NSString *)URLString;

-(void)startDownLoad;

@end



#import "ImageDownLoad.h"


@interface ImageDownLoad ()<NSURLConnectionDataDelegate>


@property(strong,nonatomic)NSURL *url;

@property(strong,nonatomic)NSMutableData *data;

@end


@implementation ImageDownLoad

-(instancetype)initWithDownLoadURLString:(NSString *)URLString

{

    self = [superinit];

    if (self) {

        self.url = [NSURLURLWithString:URLString];

    }

    returnself;

}


-(void)startDownLoad

{

    NSMutableURLRequest *request = [NSMutableURLRequestrequestWithURL:self.url];

    [NSURLConnectionconnectionWithRequest:requestdelegate:self];

}

#pragma mark 请求

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

{

    self.data = [NSMutableDatadata];

}

#pragma mark 请求到数据

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

{

    [self.dataappendData:data];

}

#pragma mark 请求完成

-(void)connectionDidFinishLoading:(NSURLConnection *)connection

{

    UIImage *image = [UIImageimageWithData:self.data];

//回到主线程

    [selfperformSelectorOnMainThread:@selector(imageDidLoad:)withObject:imagewaitUntilDone:YES];

}

#pragma mark 失败

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

{

    

}

#pragma mark 通过代理方法实现传值

-(void)imageDidLoad:(UIImage *)image

{

    if (self.delegate && [self.delegaterespondsToSelector:@selector(imageDidFinishDownLoadWithImage:)]) {

        [self.delegateimageDidFinishDownLoadWithImage:image];

    }

}

@end


0 0