使用 Kingfisher 處理網絡圖片的讀取與緩存


Kingfisher 是一個讀取網絡圖片和處理本地緩存的開源庫,由 onevcat 開發。提到圖片緩存庫,那么熟悉 Objective-C 開發的同學,可能會想起 SDWebImage。 沒錯,Kingfisher 除了提供圖片的讀取和緩存功能,它還是完全使用 Swift 實現的。

安裝 Kingfisher

那么,我們就來了解一下 Kingfisher 吧, 它支持 CocoaPods 和 Carthage 包管理,我們可以通過他們來安裝。

COCOAPODS 的安裝方法:

設置 Podfile

source 'https://github.com/CocoaPods/Specs.git' platform :ios, '8.0' use_frameworks! pod 'Kingfisher', '~> 1.7'

然后運行命令:

$ pod install
CARTHAGE 的安裝方法:

設置 Cartfile:

github "onevcat/Kingfisher" >= 1.7

然后運行命令:

$ carthage update

關於 CocoaPods 和 Carthage 的使用,可以參看這兩篇內容:

當然,如果你不習慣使用包管理,可以進行手動安裝,可以直接使用 git 命令將庫讀取出來:

$ git submodule add https://github.com/onevcat/Kingfisher.git

使用 Kingfisher

Kingfisher 對 UIImageView 做了擴展。 所以我們只需要引入 Kingfisher 庫,然后在 UIImageView 的實例上面直接調用即可:

import Kingfisher

imageView.kf_setImageWithURL(NSURL(string: "http://your_image_url.png")!)
  • 指定默認圖片

因為 Kingfisher 加載圖片的時候是異步操作的,所以在圖片讀取那段時間中,UIImageView 中是沒有圖片的,所以我們可以設置一個默認圖片:

imageView.kf_setImageWithURL(NSURL(string: "http://your_image_url.png")!, placeholderImage: nil)
  • 自定義緩存機制

關於緩存,默認情況下,KingFisher 使用圖片的 url 作為緩存的 key 值,如果你希望設置自己的緩存 key 值機制,還可以這樣:

let URL = NSURL(string: "http://your_image_url.png")! let resource = Resource(downloadURL: URL, cacheKey: "your_customized_key") imageView.kf_setImageWithResource(resource)

使用 Resource 類來進行自定義緩存鍵值的處理。

  • 強制刷新

Kingfisher 在默認情況下,每次讀取圖片的時候,會先判斷本地緩存中是否已經存在,如果存在,就使用本地緩存的圖片。當然你也可以強制每次都讀取網絡,只需要指定一個 Options 參數即可:

imageView.kf_setImageWithURL(NSURL(string: "your_image_url")!,  placeholderImage: nil,  optionsInfo: [.Options(KingfisherOptions.ForceRefresh))

Options 參數還有很多應用場景,比如你需要在圖片加載出來后,用漸變的方式顯示出來:

imageView.kf_setImageWithURL(NSURL(string: "your_image_url")!,  placeholderImage: nil,  optionsInfo: [.Transition(ImageTransition.Fade(1)))

這里的 Options 參數,就指定了一個1秒鍾的漸變顯示。

  • 回調

當然,還可以在圖片加載完成后,指定回調,來進行一些操作:

imageView.kf_setImageWithURL(NSURL(string: "your_image_url")!,  placeholderImage: nil,  optionsInfo: nil,  progressBlock: { (receivedSize, totalSize) -> () in  println("Download Progress: \(receivedSize)/\(totalSize)")  },  completionHandler: { (image, error, imageURL) -> () in  println("Downloaded and set!")  } )

結語

總之,KingFinsher 是一個非常方便的開源庫,並且它是完全使用 Swift 來創建的,極大的而方便了我們處理圖片的工作。

關於 KingFinsher 的更多內容,大家可以參看它的 Github 主頁:

https://github.com/onevcat/Kingfisher

本文轉自swiftcafe


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM