博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SDWebImage 4 0 迁移指南
阅读量:5950 次
发布时间:2019-06-19

本文共 4855 字,大约阅读时间需要 16 分钟。

刚刚更新pods 编译程序,突然发现SDWebImage报错

了解到 更换了不少方法,还增加了几个类,索性都研究一下

  • pod 更新SDWebImage版本为4.1.0

查找是否有对应缓存的 方法 由返回BOOL 值 换成Block回调中参数返回BOOL值

//老版本BOOL isInCache =[[SDImageCache sharedImageCache]diskImageExistsWithKey:@""];// 4.0 版本 [[SDImageCache sharedImageCache]diskImageExistsWithKey:@"" completion:^(BOOL isInCache) {}];复制代码

删除沙盒图片 只有 带Block回调的了

老版本- (void)clearMemory;- (void)clearDiskOnCompletion:(SDWebImageNoParamsBlock)completion;- (void)clearDisk;4.0 版本- (void)clearMemory;- (void)clearDiskOnCompletion:(nullable SDWebImageNoParamsBlock)completion;复制代码

下载图片的方法 方法名字由downloadImageWithURL 换成loadImageWithURL

1.在加载进度的Block回调里 增加了targetURL (图片URL的参数) 2.在下载完成的Block回调里 增加了 data (返回二进制)

//老版本 [[SDWebImageManager sharedManager]downloadImageWithURL:[NSURL URLWithString:@""] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) { } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {}];//4.0 版本[[SDWebImageManager sharedManager] loadImageWithURL:[NSURL URLWithString:[imageArray objectAtIndex:i]] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) { } completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) {}];复制代码

UIImageView+WebCache UIButton+WebCache等category 的方法并没改变

只是里面的图片替换逻辑 移动到新增的UIView +WebCache 里了

- (void)sd_setImageWithURL:(nullable NSURL *)url          placeholderImage:(nullable UIImage *)placeholder                   options:(SDWebImageOptions)options                  progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock                 completed:(nullable SDExternalCompletionBlock)completedBlock {    [self sd_internalSetImageWithURL:url                    placeholderImage:placeholder                             options:options                        operationKey:nil                       setImageBlock:nil                            progress:progressBlock                           completed:completedBlock];}复制代码

增加了个UIView +WebCache category

此类作用是把SDWebImage 所有的 category 如 UIButton+WebCache,UIImageView+WebCache 等分类的图片替换的逻辑 封装到 一起使用。

- (void)sd_internalSetImageWithURL:(nullable NSURL *)url                  placeholderImage:(nullable UIImage *)placeholder                           options:(SDWebImageOptions)options                      operationKey:(nullable NSString *)operationKey                     setImageBlock:(nullable SDSetImageBlock)setImageBlock                          progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock                         completed:(nullable SDExternalCompletionBlock)completedBlock;复制代码

SDWebImage4.0 播放GIF 需要使用

如果使用了用pods 除了pod 'SDWebImage' 还要添加下面俩个 pod 'SDWebImage/GIF' pod 'FLAnimatedImage'

//使用很简单

#import 
#import
FLAnimatedImageView *FLView = [[FLAnimatedImageView alloc]init]; FLView.frame = CGRectMake(0, 64, SCREEN_WIDTH, 280); [FLView sd_setImageWithURL:[NSURL URLWithString:IMAGE2] placeholderImage:[UIImage imageNamed:[NSBundle zb_placeholder]]]; [self.view addSubview:FLView];复制代码

FLAnimatedImageView+WebCache 内部实行也很简单明了, 依然调用UIView +WebCache 的方法 在设置图片的Block里 对回调里的参数imageData 进行判断如果是GIF 就使用FLAnimatedImage 的animatedImageWithGIFData方法进行赋值

- (void)sd_setImageWithURL:(nullable NSURL *)url          placeholderImage:(nullable UIImage *)placeholder                   options:(SDWebImageOptions)options                  progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock                 completed:(nullable SDExternalCompletionBlock)completedBlock {    __weak typeof(self)weakSelf = self;    [self sd_internalSetImageWithURL:url                    placeholderImage:placeholder                             options:options                        operationKey:nil                       setImageBlock:^(UIImage *image, NSData *imageData) {                           SDImageFormat imageFormat = [NSData sd_imageFormatForImageData:imageData];                           if (imageFormat == SDImageFormatGIF) {                               weakSelf.animatedImage = [FLAnimatedImage animatedImageWithGIFData:imageData];                               weakSelf.image = nil;                           } else {                               weakSelf.image = image;                               weakSelf.animatedImage = nil;                           }                       }                            progress:progressBlock                           completed:completedBlock];}复制代码

FLAnimatedImageView本身就是UIImageView的封装 ,用起来真的很快,配合SDWebImage加载GIF 都感觉不到下载的过程,以为是本地加载的一样 .在正常UITableView 列表试了下加载普通图片更是小意思。完全可以替换UIImageView

增加了一个SDImageCacheConfig 类 把之前在SDImageCache 类里初始化的几个属性拿出来单独封装,使其他类也能使用

增加了 NSImage+WebCache category macOS 平台开发时使用的一个 NSImage 的一个分类 不用太了解

我也只是 粗略的看了看 ,具体还有哪些改变,漏掉的,以后再补充

转载地址:http://lvsxx.baihongyu.com/

你可能感兴趣的文章
VC++深入详解学习笔记1
查看>>
安装配置discuz
查看>>
CentOS7 64位小型操作系统的安装
查看>>
线程互互斥锁
查看>>
KVM虚拟机&openVSwitch杂记(1)
查看>>
win7下ActiveX注册错误0x80040200解决参考
查看>>
《.NET应用架构设计:原则、模式与实践》新书博客--试读-1.1-正确认识软件架构...
查看>>
网址收藏
查看>>
2013 Linux领域年终盘点
查看>>
大学生暑期实践活动---关注少数民族孤寡老人
查看>>
linux学习之查看程序端口占用情况
查看>>
linux下配置安装OpenJDK+Tomcat
查看>>
相逢在栀枝花开的季节
查看>>
Ajax实现直链(点击量统计)
查看>>
linux下git自动补全命令
查看>>
Ubuntu14.04LTS更新源
查看>>
Linux报“Unknown HZ value! (288) Assume 100”错误
查看>>
mysql多实例实例化数据库
查看>>
Sql 字符串长度不足补0
查看>>
我的友情链接
查看>>