修改 SDWebImage 支持任意 View

修改 SDWebImage 支持任意 View

IOS小彩虹2021-08-18 8:15:34330A+A-

首发于公众号

SDWebImage 默认支持 UIImageView 和 UIButton 及其子类,对于大部分的应用场景足够好用了。

对于继承于 UIView 或者 UIControl 的自定义的控件,而又需要支持 SDWebImage 的话,就只能自己写对应的分类来实现。

有没有一劳永逸的方法,对于任何 View,都不用自己写对应的分类方法就能直接支持 SDWebImage ?

有~接下来介绍我的修改思路

官方的 SDWebImage 只支持 UIImageView 和 UIButton 这两种类型,那么只要把这两种类型抽象出来,任何基于 UIView 的控件都可以使用 SDWebImage 的分类方法,那么就可以通用化了。

抽象 UIImageView 为 SDUImageViewProtocol

@protocol SDUIImageViewProtocol <NSObject>

@optional
@property (nullable, nonatomic, strong) UIImage *image;
@property (nullable, nonatomic, strong) UIImage *highlightedImage;

@end

抽象 UIButton 为 SDUIButtonProtocol

@protocol SDUIButtonProtocol <NSObject>

@optional
- (void)setImage:(UIImage *_Nullable)image forState:(UIControlState)state;
- (void)setBackgroundImage:(UIImage *_Nullable)image forState:(UIControlState)state;

@end

然后把对应的 UIImageView 和 UIButton 分类都修改为 UIView,再修改设置UIImage 时相关类型判断的逻辑,详细代码可以参考我的 github 仓库:cntrump/SDWebImage

抽象完成以后,只要实现了以上两个协议接口的控件,都可以直接使用 SDWebImage 的方法,修改的位置非常少,几乎不影响原有逻辑,而且以后还能跟进官方源码更新。

点击这里复制本文地址 以上内容由权冠洲的博客整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

支持Ctrl+Enter提交

联系我们| 本站介绍| 留言建议 | 交换友链 | 域名展示 | 支付宝红包
本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除

权冠洲的博客 © All Rights Reserved.  Copyright quanguanzhou.top All Rights Reserved
苏公网安备 32030302000848号   苏ICP备20033101号-1
本网站由 提供CDN/云存储服务

联系我们