SDWebImageLinkPlugin
适用场景
SDWebImageLinkPlugin 是一个为 SDWebImage 框架提供的插件,通过使用 iOS 13/macOS 10.15 中引入的 链接展示 框架,为富链接 URL 提供图像加载支持。
通过使用此插件,您可以使用 SDWebImage 中的熟悉的 View Category 方法来加载丰富链接的海报图像,使用 URL 或 LPLinkMetadata
。这使得使用具有缓存支持的 LPLinkView
更加方便。
有关更多信息,请参阅 WWDC 262:嵌入和共享视觉丰富的链接
要求
- iOS 13+
- macOS 10.15+
- Xcode 11+
安装
CocoaPods
SDWebImageLinkPlugin 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中
pod 'SDWebImageLinkPlugin'
Carthage
SDWebImageLinkPlugin 通过 Carthage 提供。
github "SDWebImage/SDWebImageLinkPlugin"
Swift Package Manager (Xcode 11+)
SDWebImageLinkPlugin 通过 Swift Package Manager 提供。
let package = Package(
dependencies: [
.package(url: "https://github.com/SDWebImage/SDWebImageLinkPlugin.git", from: "0.1")
]
)
使用方法
设置加载器
要使用 LinkPlugin,您首先应设置加载器。请在此了解更多:在 Wiki - Loaders Manager
- Objective-C
// Put this code on AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
[SDImageLoadersManager.sharedManager addLoader:SDImageLinkLoader.sharedLoader];
SDWebImageManager.defaultImageLoader = SDImageLoadersManager.sharedManager;
return YES;
}
在 UIImageView 上加载丰富链接
简单快速的使用方法是使用 SDWebImage 为 UIImageView
提供的分类。
- Objective-C
NSURL *url = [NSURL URLWithString:@"https://webkit.org/"];
self.imageView = [[UIImageView alloc] init];
self.imageView.contentMode = UIViewContentModeScaleAspectFit;
[self.view addSubview:self.imageView];
[self.imageView sd_setImageWithURL:url completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
if (image && [image.sd_extendedObject isKindOfClass:LPLinkMetadata.class]) {
NSLog(@"%@", @"UIImageView metadata load success");
}
}];
在 LPLinkView 上加载丰富链接
LPLinkView
重要提示:当前 iOS 13.0 存在问题,LPLinkView
可能与 TableView/CollectionView cell-reusing 不兼容。要解决这个问题,您可以选择以下方法之一(任选其一)
- 完全不使用缓存。因此,始终传递
SDWebImageFromLoaderOnly
从网络加载元数据 - 使用技巧代码,使用空的
LPLinkMetadata
或 nil URL 创建LPLinkView
(非常重要)。
- Objective-C
NSURL *url = [NSURL URLWithString:@"https://www.apple.com/iphone/"];
self.linkView = [[LPLinkView alloc] initWithURL:nil];
[self.view addSubview:self.linkView];
[self.linkView sd_setImageWithURL:url completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
if (image && [image.sd_extendedObject isKindOfClass:LPLinkMetadata.class]) {
NSLog(@"%@", @"LPLinkView metadata load success");
}
}];
使用 LPLinkMetadata
在某些情况下,如果您已经有了预取或预先创建的 LPLinkMetadata
对象,则可以使用 SDWebImageContextLinkMetadata
上下文选项来关联它,而不需要向原始链接 URL 发送额外请求。但在大多数情况下,您不需要这样做,只需使用指向丰富链接的 NSURL
,然后我们使用 LPMetadataProvider 查询 LPLinkMetadata
。
请注意,如果您不想进行双重缓存(LPLinkMetadata
存档将包含图像数据,而不是简单的图像 URL),请不要使用 NSCoding
方法从回调的 image.sd_extendedObject
同步或缓存元数据到您的存储。让框架来处理这件事。
- Objective-C
// Decoding a metadata from your serialization solution
LPLinkMetadata *metadata = [NSKeyedUnarchiver unarchiveObjectWithFile:@"/path/to/metadata"];
// Load image without query metadata again
[imageView sd_setImageWithURL:metadata.originalURL placeholderImage:nil options:0 context:@{SDWebImageContextLinkMetadata : metadata}];
注意:默认情况下,如果图像已缓存,我们不会发送查询新元数据的请求。如果您需要查询元数据,请考虑使用 SDWebImage 的 SDWebImageRefreshCached
选项。或者使用 SDWebImageFromLoaderOnly
以避免在查询时使用缓存。
注意:默认情况下,我们更倾向于仅加载图像,这不会生成图像数据。这可以提高加载速度。但是,您也可以使用 SDWebImageContextLinkRequestImageData
上下文选项指定生成图像数据。
向后部署
该框架从 v0.3.0 版本开始支持 iOS 12-/macOS 10.14- 版本的向后部署。向后部署支持 Carthage/CocoaPods(SwiftPM 不支持)。
对于 CocoaPods 用户,您可以在 Podfile 中省略平台版本验证
platform :ios, '13.0' # This does not effect your App Target's deployment target version, just a hint for CocoaPods
对于 Carthage 用户,构建的二进制框架使用弱链接以进行向后部署。
请注意,您应始终使用运行时版本检查以确保这些符号可用,还应该使用 API_AVAILABLE
注释标记所有使用公共 API 的类。见下文
if (@available(iOS 13, *)) {
SDImageLinkLoader.sharedLoader.timeout = 60;
}
API_AVAILABLE(ios(13.0))
@interface MyLinkManager : NSObject
@property (nonatomic) LPLinkMetadata *metadata;
@property (nonatomic) SDImageLinkLoader *loader;
@end
示例
如果您在使用过程中有任何问题,SDWebImageLinkPlugin 为 iOS 和 macOS 平台提供了一个示例。要运行示例,请克隆存储库并运行以下命令。
cd Example/
pod install
open SDWebImageLinkPlugin.xcworkspace
打开 Xcode 项目后,点击 Run
编译和运行示例。
提示:iOS 示例提供了两种视图的使用。点击 切换视图
在 UIImageView/LPLinkView 之间切换。
截图
这些丰富的链接图片来自 Apple 网站 和 WebKit 网站.
作者
DreamPiggy
许可
SDWebImageLinkPlugin 以 MIT 许可协议提供。更多信息请查看 LICENSE 文件。