有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
本文将介绍如何使用 SDWebImage 加载网络 AVIF 图片。

安装 AVIF SDK

使用 Cocoapods 集成
1. 在您工程 Podfile 文件中添加模块:
pod 'CloudInfinite/SDWebImage-CloudInfinite'
pod 'CloudInfinite/AVIF'
2. 在终端执行安装命令:
pod install

使用 SDWebImage 直接加载 AVIF 图片链接。

SDWebImage-CloudInfinite 模块在 APP 启动时已自动将 AVIF 解码器加入到 SDWebImage 解码器队列中,在加载解码器时自动找到 AVIF 解码器来解码图片。支持动图,无需额外操作。使用时与 SDWebImage 使用没有任何区别。
Objective-C
[imageView sd_setImageWithURL:[NSURL URLWithString:@"AVIF 图片链接"]];
swift
UIImageView() .sd_setImage(with: NSURL.init(string: "AVIF 图片链接"))
说明:
图片链接可以携带万象处理参数。

使用 SDWebImage 指定加载 AVIF 格式并携带万象处理参数。

SDWebImage-CloudInfinite 中 UIImageView+CI 类是模仿 SDWebImage 调用风格,封装了一组可以传入 transform 的方法。
Objective-C
// 构建 CITransformation 实例
CITransformation * transform = [CITransformation new];

// 设置 TPG 格式以及传参方式
[transform setFormatWith:CIImageTypeAVIF options:CILoadTypeUrlFooter];
// transform 可以继续指定其他处理参数
[transform setXXXX:];
// 调用 UIImageView+CI 类种方法,加载图片
[self.imageView sd_CI_setImageWithURL:[NSURL URLWithString:@"图片链接"] transformation:transform];
swift
let transform = CITransformation();
transform.setFormatWith(CIImageFormat.typeAVIF, options: CILoadTypeEnum.urlFooter);
transform.setXXXX();
UIImageView().sd_CI_setImage(with: NSURL.init(string: ""), transformation: transform)

设置加载失败后原图重试

说明:
SDWebImage-CloudInfinite 版本必须大于等于1.5.0
1. setLoadTPGAVIFImageErrorHandler 可以在回调里将 AVIF 图片链接转换为普通图片链接。默认是将图片链接中 format/avif 进行删除。
[UIView setLoadOriginalImageWhenError:YES];
// 可选配置,SDK 内部将图片链接中 format/avif 删除,如果不满足业务,则需自定义 AVIF 链接转换原图链接策略。
[UIView setLoadTPGAVIFImageErrorHandler:^NSString *(NSString * _Nonnull url) {
NSString * newUrl = @"";/// 将 AVIF 转换为原格式链接
return newUrl;
}];
2. AVIF 失败后原图重试错误收集
原图重试方案主要用于提升用户体验,但是 AVIF 加载失败错误信息还是需要收集,并根据错误信息来分析排查问题,解决问题。
[UIView setTPGAVIFImageErrorObserver:^(NSString * _Nonnull url, NSError * _Nonnull error) {
// error 为解码失败的错误信息 可以在这里统一处理 AVIF 加载失败的错误信息。
}];