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