在oc時代有個非常強大圖片緩存處理的庫SDWebImage煎楣,swift中現(xiàn)在也有個不錯的圖片處理的庫----Kingfisher
此庫是由onevcat大神所寫份蝴,感謝大神的無私奉獻英融。
大神關于swift的理解非常深刻,http://swifter.tips/ 我最近正在拜讀,推薦給大家。深入理解swift語言步鉴。
下面簡單介紹下這個庫的一些用法。其實都在大神github地址上有所講解
https://github.com/onevcat/Kingfisher
Kingfisher文檔地址:http://cocoadocs.org/docsets/Kingfisher/1.6.1/
Kingfisher庫下載圖片默認是帶緩存的
最簡單的使用
import Kingfisher
imageView.kf_setImageWithURL(NSURL(string: "http://your_image_url.png")!)
這邊我也是滿心歡喜的在百度隨便找了個圖測試,但是并沒有down下來氛琢。喊递。用https就可以,看下控制臺信息好像是安全之類的問題阳似,網上查了下 解決了
http 開頭連接不能讀取解決方案 ,在info.plist里加上下面這段
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
</plist>
或者 去配置一個Dictionary類型的NSAppTransportSecurity 子item是Boolean類型NSAllowsArbitraryLoads value是YES
OK骚勘,解決。
我是隨便在baidu找了一張卡通圖
http://pic29.nipic.com/20130512/12428836_110546647149_2.jpg
第一次回加載一會障般,第二次就不會加載了调鲸。
添加默認圖
我們大多會在tableviewCell中的頭像上使用盛杰,加載的時候顯示空空的有點怪挽荡。作者很貼心的給我們提供了默認圖參數(shù)
testImag.kf_setImageWithURL(NSURL(string: "http://your_image_url.png")!, placeholderImage: UIImage(named: "mrt"))
這時候在加載的時候就會顯示默認圖
默認情況下Kingfisher使用url當做cache(緩存)的key。 不過你也可以自定義這個key 即供。
let URL = NSURL(string: "http://your_image_url.png")!
let resource = Resource(downloadURL: URL, cacheKey: "your_customized_key")
imageView.kf_setImageWithResource(resource)
首先會在內存或者硬盤讀取“your_customized_key”的緩存 定拟,如果沒有找到,就嘗試從URL里download逗嫡,down下來在用你提供的key保存起來供下次使用
一些選項
Kingfisher 默認先從內存和硬盤搜 青自,如果沒找到才去URL down,當然你也可以強制它每次從URL down驱证,忽略緩存
imageView.kf_setImageWithURL(NSURL(string: "your_image_url")!, placeholderImage: nil, optionsInfo: [.Options: KingfisherOptions.ForceRefresh])
還有一些其他的選項控制緩存等級的延窜,這些可以看文檔
你還可以自定義緩存取代默認的。
let myCache = ImageCache(name:"my_cache")
imageView.kf_setImageWithURL(NSURL(string: "your_image_url")!, placeholderImage: nil, optionsInfo: [.TargetCache: myCache])
這個在某種情況下你想使用指定緩存的時候會有用
當然抹锄,還可以設置一些動畫
imageView.kf_setImageWithURL(NSURL(string: "your_image_url")!,
placeholderImage: nil,
optionsInfo: [.Transition: ImageTransition.Fade(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!")
})
取消任務
所有 kf_setImageWithURL
都返回 RetrieveImageTask
類型的對象 , 你可以調用cancel
方法取消正在執(zhí)行的任務
let task = imageView.kf_setImageWithURL(NSURL(string: "http://your_image_url.png")!)
task.cancel()
下載和緩存系統(tǒng)
我們可以自定義下載和緩存系統(tǒng)的一寫屬性伙单,比如 超時時間
let downloader = KingfisherManager.sharedManager.downloader
// 修改超時時間
downloader.downloadTimeout = 5
let cache = KingfisherManager.sharedManager.cache
// 設置硬盤最大緩存50M 获高,默認無限
cache.maxDiskCacheSize = 50 * 1024 * 1024
// 設置硬盤最大保存3天 , 默認1周
cache.maxCachePeriodInSecond = 60 * 60 * 24 * 3
// 獲取硬盤緩存的大小
cache.cache.calculateDiskCacheSizeWithCompletionHandler { (size) -> () in
println("disk size in bytes: \(size)")
}
內存的緩存在app退出或者后臺運行或者內存警告的時候會被清除 吻育,硬盤在滿足上面的條件才會被清理 念秧, 當然也可以手動清理
//清理內存緩存
cache.clearMemoryCache()
// 清理硬盤緩存,這是一個異步的操作
cache.clearDiskCache()
// 清理過期或大小超過磁盤限制緩存布疼。這是一個異步的操作
cache.cleanExpiredDiskCache()
大概就這些基本的操作摊趾,更多操作,大家去查看文檔游两。這些基本操作也在github上有砾层。我就簡單翻譯過來的。供自己以后查閱器罐,也推薦給大家梢为。上面的代碼自己也試過,確實好用。
再次感謝onevcat大神铸董,支持國產庫祟印!