Contents
そもそも、PINCacheって?
https://github.com/pinterest/PINRemoteImage
親ライブラリはこちら、PINRemoteImage。
Pinterestで利用されている画像ローダー。
https://github.com/pinterest/PINCache
そのうち、キャッシュにまつわるライブラリはこちら。
https://qiita.com/hcrane/items/422811dfc18ae919f8a4
Alamofire他の画像ライブラリとの比較はこちら。
今回、上司命令でこれを使うことになったので使い方を備忘録がてら。
使ってみましょう
podをインストールしたら、まず
import PINRemoteImage import PINCache
順序としては逆と思うかもしれませんが、先に表示箇所へ反映してやりたいので
viewDidLoad()らへんで既存のキャッシュを見に行きます。
PINCache.shared().object(forKey: "(画像キー)") { (cache, key, object) in
if var image = object as? UIImage {
self.profile_image = image
}
}画像のキーは他のものと被らない一意に設定できるものを使います。
何かしらのテーブルから取ってきてるんではないかと思うので、
引用元のテーブル+連番でいいんじゃないでしょうか。
一方今回キャッシュが無かったら、新規にデータを取ってきて格納します。
if (self.profile_image != nil){
testSection.profilePictureButton.setImage(self.profile_image, for: UIControl.State.normal)
}
else{
let storage = Storage.storage().reference().child("データベースから取ってきた画像の参照先")
storage.getData(maxSize: 1 * 1024 * 1024) {
data, error in
if let error = error {
}
else {
let image = UIImage(data: data!)!
profilePictureButton.setImage(image, for: UIControl.State.normal)
PINCache.shared().setObject(image, forKey: "(画像キー)")
}
}
}firebase strageから取ってくるのは前回同様。
これでキャッシュされている限り画像がサクサク表示されます。
あとは本当はPreloadができるといいなぁ、とか…