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ができるといいなぁ、とか…