对UIImageView+WebCache的封装
UIImageView+SDWebImage.h
#import <UIKit/UIKit.h> typedef void(^DownloadImageSuccessBlock)(UIImage *image); typedef void(^DownloadImageFailedBlock)(NSError *error); typedef void(^DownloadImageProgressBlock)(CGFloat progress); @interface UIImageView (SDWebImage) /** 异步加载图片 @param url 图片地址 @param imageName 占位图片名 */ - (void)downloadImage:(NSString *)url placeholder:(NSString *)imageName; /** 异步加载图片,可以监听下载进度,成功或失败 @param url 图片地址 @param imageName 占位图片名 @param success 下载成功 @param failed 下载失败 @param progress 下载进度 */ - (void)downloadImage:(NSString *)url placeholder:(NSString *)imageName success:(DownloadImageSuccessBlock)success failed:(DownloadImageFailedBlock)failed progress:(DownloadImageProgressBlock)progress; @end
UIImageView+SDWebImage.m
#import "UIImageView+SDWebImage.h" #import "UIImageView+WebCache.h" @implementation UIImageView (SDWebImage) - (void)downloadImage:(NSString *)url placeholder:(NSString *)imageName { [self sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:[UIImage imageNamed:imageName] options:SDWebImageRetryFailed | SDWebImageLowPriority]; } - (void)downloadImage:(NSString *)url placeholder:(NSString *)imageName success:(DownloadImageSuccessBlock)success failed:(DownloadImageFailedBlock)failed progress:(DownloadImageProgressBlock)progress { [self sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:[UIImage imageNamed:imageName] options:SDWebImageRetryFailed | SDWebImageLowPriority progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) { progress(receivedSize * 1.0 / expectedSize); } completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) { if (error) { failed(error); } else { self.image = image; success(image); } }]; } @end