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)),.Data0.25)). 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) . ) .onProgress { 收到的大小,totalSize } .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 許可下發布的。有關詳細信息,請參閱許可證。