Kingfisher 是一个强大的纯 Swift 库,用于从网络下载和缓存图像。它为您提供了在下一个应用程序中使用纯 Swift 方式处理远程图像的机会。
异步图像下载和缓存。
从基于URLSession
的网络或本地提供的数据加载图像。
提供有用的图像处理器和过滤器。
内存和磁盘的多层混合缓存。
对缓存行为的精细控制。可定制的有效期和大小限制。
可取消下载并自动重用以前下载的内容以提高性能。
独立组件。根据需要分别使用下载器、缓存系统和图像处理器。
预取图像并从缓存中显示它们以增强您的应用程序。
UIImageView
、 NSImageView
、 NSButton
、 UIButton
、 NSTextAttachment
、 WKInterfaceImage
、 TVMonogramView
和CPListItem
的扩展可直接从 URL 设置图像。
设置图像时内置过渡动画。
加载图像时可自定义占位符和指示器。
轻松扩展图像处理和图像格式。
低数据模式支持。
SwiftUI 支持。
Swift 6 和 Swift Concurrency(严格模式)准备好了。
加载和缓存实时照片。
最简单的用例是使用UIImageView
扩展将图像设置为图像视图:
导入 Kingfisherlet url = URL(字符串: "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 以简单的方式完成艰巨的任务。例如,下面的代码:
下载高分辨率图像。
对其进行下采样以匹配图像视图大小。
使其具有给定半径的圆角。
下载时显示系统指示器和占位符图像。
准备好后,它会以“淡入”效果对小缩略图进行动画处理。
原始大图像也会缓存到磁盘以供以后使用,从而避免在详细视图中再次下载它。
任务完成时,无论成功还是失败,都会打印控制台日志。
让 url = URL(字符串: "https://example.com/high_resolution_image.png") 让处理器 = 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 inswitch result {case .success(let value):print("任务完成:(value.source.url?.absoluteString ?? "")")case .failure(let error):print("作业失败: (error.localizedDescription)")}}
这是我在日常工作中经常遇到的情况。想想如果没有翠鸟,你需要写多少行!
如果您不喜欢kf
扩展,您也可以更喜欢使用KF
构建器并链接方法调用。下面的代码正在做同样的事情:
// 使用`kf`扩展imageView.kf.setImage(with: url,placeholder: placeholderImage,options: [.processor(processor),.loadDiskFileSynchronously,.cacheOriginalImage,.transition(.fade(0.25)),.lowDataMode(.network (lowResolutionURL))],progressBlock: { returnedSize,totalSize in// 更新进度},completionHandler: { result in//完成})// 使用 `KF` builderKF.url(url) .placeholder(占位符图片) .setProcessor(处理器) .loadDiskFileSynchronously() .cacheMemoryOnly() .fade(持续时间:0.25) .lowDataModeSource(.network(lowResolutionURL)) .onProgress { 收到的大小,totalSize in } .onSuccess { 结果 } .onFailure { 错误 } .set(到: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 { 收到的大小,totalSize in } .onSuccess { 结果} .onFailure { }}} 中的错误
(UIKit/AppKit) iOS 13.0+ / macOS 10.15+ / tvOS 13.0+ / watchOS 6.0+ / VisionOS 1.0+
(SwiftUI) iOS 14.0+ / macOS 11.0+ / tvOS 14.0+ / watchOS 7.0+ / VisionOS 1.0+
斯威夫特 5.9+
(UIKit/AppKit) iOS 12.0+ / macOS 10.14+ / tvOS 12.0+ / watchOS 5.0+ / VisionOS 1.0+
(SwiftUI) iOS 14.0+ / macOS 11.0+ / tvOS 14.0+ / watchOS 7.0+ / VisionOS 1.0+
斯威夫特 5.0+
请参阅以下教程之一来安装和使用该框架:
UIKit教程
SwiftUI 教程
或者,您可以按照以下任一方法进行操作。
文件 > Swift 包 > 添加包依赖项
添加https://github.com/onevcat/Kingfisher.git
选择“Up to Next Major”和“8.0.0”
源 'https://github.com/CocoaPods/Specs.git'platform:ios, '13.0'use_frameworks!target 'MyApp' 执行 pod 'Kingfisher', '~> 8.0'end
打开发布页面,从资产部分下载最新版本的 Kingfisher。
将Kingfisher.xcframework
拖到您的项目中并将其添加到目标(通常是应用程序目标)。
选择您的目标,在“常规”选项卡中,找到“框架、库和嵌入内容”部分,将Embed Without Signing
”设置为 Kingfisher。
检查文档和教程:
文档主页
入门
UIKit教程
SwiftUI 教程
常见任务 - 一般
常见任务 - 缓存
常见任务 - 下载程序
常见任务 - 处理器
翠鸟 8.0 迁移
翠鸟 7.0 迁移
如果您使用的是更早的版本,请参阅下面的指南以了解迁移步骤。
我想让 Kingfisher 保持轻量化。该框架专注于提供一个简单的下载和缓存图像的解决方案。这并不意味着该框架无法改进。 Kingfisher 远非完美,因此我们将进行必要且有用的更新以使其变得更好。
热烈欢迎任何贡献和拉取请求。但是,在您计划实现某些功能或尝试解决不确定的问题之前,建议先展开讨论。如果您的拉取请求可以在所有测试都绿色的情况下构建,我们将不胜感激。 :)
翠鸟标志的灵感来自七巧板,这是一种来自中国的由七个平面形状组成的解剖拼图。我相信她是翠鸟而不是雨燕,但有人坚持认为她是鸽子。我想我应该给她起个名字。嗨,伙计们,你们有什么建议吗?
在 Twitter 或新浪微博上关注并联系我。如果发现问题,请开票。也热烈欢迎拉取请求。
没有您的帮助,开源项目就无法长久。如果您发现 Kingfisher 有用,请考虑成为赞助商来支持该项目。您的用户图标或公司徽标会显示在我的博客上,并带有指向您主页的链接。
通过 GitHub Sponsors 成为赞助商。 ❤️
特别感谢:
Kingfisher 是在 MIT 许可下发布的。有关详细信息,请参阅许可证。