Kingfisher 源码解析(一)

October 11, 2018   

Kingfisher 是一个纯 swift 语言编写的图片处理库,它的很多设计思路借鉴了 OC 版本的 SDWebImage ,但不影响它成为 swift 语言中最好用的图片库。它的源码前后断断续续地阅读了很长时间,每次阅读都感觉能学到很多东西。

Kingfisher 核心功能就是给 ImageView 和 Button 这两种可以展示图片的控件设置网络图片。同时也提供了图片裁切合成滤镜缓存批量下载图片展示动画 等一系列功能,设计到了 swift 语言的 泛型面向协议编程运算符重载结构体 等很多 swift 语言的特性,可以说是一款非常适合用来学习 swift 语言的三方库。

当前版本 Kingfisher 4.10.0

Swift sersion 4.2

简单分析一下每个文件的作用

  • Image.swift 提供图片的加工功能,包括 cgImageUIImage , DataUIImage , 图片类型的判断和转换,图片的混合、拉伸、切圆角、毛玻璃效果等图片加工
  • Indicator.swift 加载过程中的指示器 默认提供提供了一个系统的菊花 loading 效果,也可以自己传一张图来自定义加载 loading 的效果
  • ImageCache.swift 图片缓存管理 提供了对下载图片的内存缓存、磁盘缓存、缓存的清理、缓存时间的设置、缓存图片的存储和读取
  • ImageDownloader.swift 图片下载器 下载任务开始、取消,批量取消、提供了下载任务的回调监听
  • ImagePrefetcher.swift 批量抓取图片 提供了图片的批量下载,提供了完成、跳过、抓取的图片量的回调。
  • ImageProcessor.swift 图片加工器 提供了通用、混合效果、圆角加工、拉伸、毛玻璃效果、颜色控制、黑白图片。合成等等多种加工功能
  • ImageModifier.swift 图片的修改类 用来在使用前修改缓存的图片,提供了翻转效果(iOS9 以上)、图片的对齐方式、填充模式等一些 modifier
  • CacheSerializer.swift FormatIndicatedCacheSerializer 缓存序列化和反序列化 将图片转成 Data 或者将 data 转成 图片 支持 png、jpeg 和 gif 三种格式
  • RequestModifier.swift 请求修改 提供了对图片资源请求的修改能力
  • ImageTransition.swift 提供了 4 中图片翻转的效果
  • KingfisherManager.swift 最核心的文件之一,管理下载 task , 取回图片和下载并缓存图片的两个核心函数
  • KingfisherOptionsInfo.swift 下载行为的控制,提供了非常多的枚举类型,用来控制下载任务对图片的处理
  • Filter.swift 滤镜 根据一个加工器和图片处理枚举类型对图片使用滤镜效果
  • Placeholder.swift 为了 ImageView 提供一个占位图片
  • Resource.swift 图片的URL请求
  • Kingfisher.swift 为了需要使用的类型提供一层包装,个人理解是将方法与使用者自己定义的一些方法隔离开来

Kingfisher 设置图片是通过为 ImageView 和 Button 两种类型控件提供分类扩展方法来实现的。详情见 Extensions 文件夹

同时也提供了字符串的 MD5 和线程的扩展等方法,也为展示gif 图片提供了一个 AnimatedImageView 控件


comments powered by Disqus