Kingfisher 是一个功能强大的纯 Swift 库,用于从 Web 下载和缓存图像
《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的Kingfisher 是一个功能强大的纯 Swift 库,用于从 Web 下载和缓存图像。
Kingfisher它使您有机会在下一个应用程序中使用纯 Swift 方式处理远程图像。
Kingfisher特征
异步图像下载和缓存。从URLSession基于网络或本地提供的数据加载图像。提供有用的图像处理器和过滤器。内存和磁盘的多层混合缓存。对缓存行为的精细控制。可定制的到期日期和大小限制。可取消下载和自动重用以前下载的内容以提高性能。独立组件。根据需要分别使用下载器、缓存系统和图像处理器。预取图像并从缓存中显示它们以提升您的应用程序。UIImageView, NSImageView, NSButton, UIButton, NSTextAttachment,和的扩展名WKInterfaceImage,用于直接从 URL 设置图像。TVMonogramViewCPListItem设置图像时内置过渡动画。加载图像时可自定义的占位符和指示器。易于扩展的图像处理和图像格式。低数据模式支持。SwiftUI 支持。Kingfisher
import Kingfisher let url = URL(string: "https://example.com/image.png") imageView.kf.setImage(with: url)Kingfisher 将从 下载图像url,将其发送到内存缓存和磁盘缓存,并以imageView. 当您稍后使用相同的 URL 设置它时,图像将从缓存中检索并立即显示。
如果您使用 SwiftUI,它也可以工作:
var body: some View { KFImage(URL(string: "https://example.com/image.png")!) }一个更高级的例子
借助强大的选项,您可以用 Kingfisher 以简单的方式完成艰巨的任务。例如,下面的代码:
下载高分辨率图像。对其进行下采样以匹配图像视图大小。使其以给定的半径转角。下载时显示系统指示器和占位符图像。准备好后,它会以“淡入”效果对小缩略图图像进行动画处理。原始的大图像也被缓存到磁盘以供以后使用,以避免在详细视图中再次下载它。任务完成时会打印控制台日志,无论是成功还是失败。let url = URL(string: "https://example.com/high_resolution_image.png") let processor = DownsamplingImageProcessor(size: imageView.bounds.size) |> RoundCornerImageProcessor(cornerRadius: 20) imageView.kf.indicatorType = .activity imageView.kf.setImage( with: url, placeholder: UIImage(named: "placeholderImage"), options: [ .processor(processor), .scaleFactor(UIScreen.main.scale), .transition(.fade(1)), .cacheOriginalImage ]) { result in switch result { case .success(let value): print("Task done for: \(value.source.url?.absoluteString ?? "")") case .failure(let error): print("Job failed: \(error.localizedDescription)") } }方法链
如果您不是kf扩展的粉丝,您也可以更喜欢使用KF构建器并链接方法调用。下面的代码做同样的事情:
// Use `kf` extension imageView.kf.setImage( with: url, placeholder: placeholderImage, options: [ .processor(processor), .loadDiskFileSynchronously, .cacheOriginalImage, .transition(.fade(0.25)), .lowDataMode(.network(lowResolutionURL)) ], progressBlock: { receivedSize, totalSize in // Progress updated }, completionHandler: { result in // Done } ) // Use `KF` builder KF.url(url) .placeholder(placeholderImage) .setProcessor(processor) .loadDiskFileSynchronously() .cacheMemoryOnly() .fade(duration: 0.25) .lowDataModeSource(.network(lowResolutionURL)) .onProgress { receivedSize, totalSize in } .onSuccess { result in } .onFailure { error in } .set(to: imageView)更好的是,如果以后你想切换到 SwiftUI,只需将KF上面的内容更改为KFImage,你就完成了:
struct ContentView: View { var body: some View { KFImage.url(url) .placeholder(placeholderImage) .setProcessor(processor) .loadDiskFileSynchronously() .cacheMemoryOnly() .fade(duration: 0.25) .lowDataModeSource(.network(lowResolutionURL)) .onProgress { receivedSize, totalSize in } .onSuccess { result in } .onFailure { error in } } }要求
iOS 12.0+ / macOS 10.14+ / tvOS 12.0+ / watchOS 5.0+(如果您只使用 UIKit/AppKit)iOS 14.0+ / macOS 11.0+ / tvOS 14.0+ / watchOS 7.0+(如果你在 SwiftUI 中使用它)Swift 5.0+安装指南
Swift 包管理器
选择文件 > Swift 包 > 添加包依赖项。https://github.com/onevcat/Kingfisher.git在“选择包存储库”对话框中输入。在下一页中,将版本解析规则指定为“Up to Next Major”,最早版本为“7.0.0”。在 Xcode 检查源代码并解析版本后,您可以选择“Kingfisher”库并将其添加到您的应用程序目标中。Cocoa
CocoaPods是 Cocoa 项目的依赖管理器。您可以使用以下命令安装它:
$ gem install cocoapods要使用 CocoaPods 将 Kingfisher 集成到您的 Xcode 项目中,请将其指定为您的Podfile:
source https://github.com/CocoaPods/Specs.git platform :ios, 12.0 use_frameworks! target MyApp do # your other pod # ... pod Kingfisher, ~> 7.0 end然后,运行以下命令:
$ pod install从 CocoaPods 安装任何内容后,您应该打开{Project}.xcworkspace而不是打开。{Project}.xcodeproj
Carthage
Carthage是 Cocoa 应用程序的去中心化依赖管理器。要安装 carthage 工具,您可以使用Homebrew。
$ brew update $ brew install carthage要使用 Carthage 将 Kingfisher 集成到您的 Xcode 项目中,请在您的Cartfile:
github "onevcat/Kingfisher" ~> 7.0然后,运行以下命令来构建 Kingfisher 框架:
$ carthage update Kingfisher --platform iOS # Or `--platform macOS`, `--platform tvOS`, `--platform watchOS`最后,您需要手动设置您的 Xcode 项目以添加 Kingfisher 框架:
在应用程序目标的“常规”设置选项卡上,在“链接框架和库”部分中,从磁盘上的 Carthage/Build 文件夹中拖放要使用的每个框架。在应用程序目标的“Build Phases”设置选项卡上,单击“+”图标并选择“New Run Script Phase”。创建一个包含以下内容的运行脚本:/usr/local/bin/carthage copy-frameworks 在“输入文件”下添加要使用的框架的路径:$(SRCROOT)/Carthage/Build/iOS/Kingfisher.framework 将复制的框架的路径添加到“输出文件”:$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Kingfisher.framework—END—
开源协议:MIT license
开源地址:
https://github.com/onevcat/Kingfisher我告诉你msdn版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!