Kingfisher 非常類(lèi)似于OC中的SDWebImage, 是實(shí)現(xiàn)圖片加載和緩存的三方庫(kù)
常用的方法有:
imageView.kf_setImageWithURL(NSURL(string: "http://your_image_url.png")!)
imageView.kf_setImageWithURL(NSURL(string: "http://your_image_url.png")!, placeholderImage: nil)
通常來(lái)說(shuō),
Kingfisher將圖片資源下載到本地后,是以圖片資源的相對(duì)地址作為緩存圖片的Key,用戶(hù)再次調(diào)用鏈接下載圖片,Kingfisher首先會(huì)去查找本地是否有該圖片的緩存,根據(jù)的就是這個(gè)Key。
當(dāng)然,
Kingfisher 還給用戶(hù)提供了接口來(lái)指定 Key
let URL = NSURL(string: "http://your_image_url.png")!let resource = Resource(downloadURL: URL, cacheKey: "your_customized_key")
imageView.kf_setImageWithResource(resource)
在圖片加載完成后,我們有可能希望他會(huì)以動(dòng)畫(huà)的形式展現(xiàn)出來(lái),Kingfisher也是提供了接口的:
imageView.kf_setImageWithURL(NSURL(string: "your_image_url")!, placeholderImage: nil, optionsInfo: [.Transition(ImageTransition.Fade(1))])
可以多研究下
optionsInfo 這個(gè)參數(shù),可以很方便的實(shí)現(xiàn)以下功能,記得參數(shù)是以數(shù)組的形式傳進(jìn)去的:
public enum KingfisherOptionsInfoItem {
case TargetCache(ImageCache?) //這里可以指定圖片的放在那個(gè)Cache里
case Downloader(ImageDownloader?) //使用哪個(gè)下載器
case Transition(ImageTransition) //加載完成后,以什么樣的方式展現(xiàn)出來(lái)(動(dòng)畫(huà))
case DownloadPriority(Float) //下載優(yōu)先級(jí)
case ForceRefresh //是否強(qiáng)制刷新(忽略本地緩存)
case ForceTransition //強(qiáng)制動(dòng)畫(huà)
case CacheMemoryOnly //只查找內(nèi)存? 只在內(nèi)存緩存?
case BackgroundDecode //后臺(tái)解碼
case CallbackDispatchQueue(dispatch_queue_t?) //在哪個(gè)隊(duì)列下載
case ScaleFactor(CGFloat) //縮放比例 origin.size / scaleFactor = new.size, 即 >1 是縮小, (0, 1)是放大
case PreloadAllGIFData //預(yù)先加載Gif數(shù)據(jù)
}
如果加載的圖片比較大,可以加載的過(guò)程中顯示加載UI(Activity),只要一句代碼就可以:
testImageView.kf_showIndicatorWhenLoading = true
imageView.kf_setImageWithURL(NSURL(string: "http://your_image_url.png")!)
不過(guò)這里的Activity貌似不能自定義,里邊的方法是私有的的(private)
除了使用Activity顯示加載過(guò)程,也可以使用block回調(diào)實(shí)現(xiàn)加載進(jìn)度計(jì)算,自己自定義去顯示加載進(jìn)度
imageView.kf_setImageWithURL(NSURL(string: "your_image_url")!, placeholderImage: nil, optionsInfo: nil, progressBlock: { (receivedSize, totalSize) -> () in
print("Download Progress: \(receivedSize)/\(totalSize)")
completionHandler: { (image, error, cacheType, imageURL) -> () in
print("Downloaded and set!")
}
關(guān)于Gif的顯示
let imageView = AnimatedImageView()
imageView.kf_setImageWithURL(NSURL(string: "your_animated_gif_image_url")!)
預(yù)加載圖片
let urls = ["http://example.com/image1.jpg", "http://example.com/image2.jpg"].map { NSURL(string: $0)! }let prefetcher = ImagePrefetcher(urls: urls, optionsInfo: nil, progressBlock: nil, completionHandler: { (skippedResources, failedResources, completedResources) -> () in print("These resources are prefetched: \(completedResources)")})
prefetcher.start()