王尘宇王尘宇

研究百度干SEO做推广变成一个被互联网搞的人

Kingfisher 是一个功能强大的纯 Swift 库,用于从 Web 下载和缓存图像


《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的Kingfisher 是一个功能强大的纯 Swift 库,用于从 Web 下载和缓存图像。

Kingfisher它使您有机会在下一个应用程序中使用纯 Swift 方式处理远程图像。

Kingfisher特征

异步图像下载和缓存。从URLSession基于网络或本地提供的数据加载图像。提供有用的图像处理器和过滤器。内存和磁盘的多层混合缓存。对缓存行为的精细控制。可定制的到期日期和大小限制。可取消下载和自动重用以前下载的内容以提高性能。独立组件。根据需要分别使用下载器、缓存系统和图像处理器。预取图像并从缓存中显示它们以提升您的应用程序。UIImageView, NSImageView, NSButton, UIButton, NSTextAttachment,和的扩展名WKInterfaceImage,用于直接从 URL 设置图像。TVMonogramViewCPListItem设置图像时内置过渡动画。加载图像时可自定义的占位符和指示器。易于扩展的图像处理和图像格式。低数据模式支持。SwiftUI 支持。

Kingfisher

import Kingfisherlet 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 inswitch 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` extensionimageView.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` builderKF.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.gitplatform :ios, 12.0

use_frameworks!

target MyApp do# your other pod# ...pod Kingfisher, ~> 7.0end

然后,运行以下命令:

$ 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

相关文章

评论列表

发表评论:
验证码

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。