GIF 和 Animated WebP 是互联网上最主流的动图格式, 但是在 iOS 开发中, 原生的 UIImage 并不直接支持 GIF 以及 Animated WebP 的展示, 因此有了各种优秀的第三方开源方案...使用原生 API 展示 GIF 需要使用 ImageIO.framework 来从 data 中解析出每一帧, 同时通过 UIImageView 的 animationImages 属性来达成动画的支持...基于上述的问题, 应该将逐帧加载思路应用到端内, 在动图加载到内存时, 只从二进制数据中解码第一帧; 然后在 CADisplayLink 触发时解析当前需要展示的帧, 同时合理地使用帧缓存, 避免上述...在此次优化中, QMAnimatedImageView 不直接持有帧缓存, 而是通过 QMAnimatedWebImage 存储帧缓存, 如果动图被 SDImageCache 从内存释放掉, QMAnimatedWebImage... 也会清掉帧缓存, 在 Cell 复用场景, 帧缓存只要被解码过就不会重复执行解码, 动图只要不被从内存缓存释放, 帧缓存就不会被清空.
4.3.3 下采样, 时间换空间
在实际开发中, 经常会有图片尺寸远大于显示区域的情况