ImageProcessor
Kingfisherは取得した画像を編集してから適用するImageProcessorがある
let cirlceImageProcessor = RoundCornerImageProcessor(cornerRadius: CGFloat.greatestFiniteMagnitude)
let options: KingfisherOptionsInfo = [.processor(cirlceImageProcessor)]
setImage(with: resource, options: options)
で、こんな感じで書くと角丸を付けて表示出来る。
背景が白くなる問題
稀にこのような状態になることがある
原因
原因はjpgの画像はjpgでキャッシュされる為。
最初の描画時はdrawでマスク後に描画されるが、2回目移行はディスクキャッシュから取ってきてそのまま表示される。jpgは透過情報を持たないので白くなってしまう
対策
pngでキャッシュすればOK
キャッシュポリシーはcacheSerializerのオプションで指定可能
let cirlceImageProcessor = RoundCornerImageProcessor(cornerRadius: CGFloat.greatestFiniteMagnitude)
let options: KingfisherOptionsInfo = [.processor(cirlceImageProcessor), .cacheSerializer(FormatIndicatedCacheSerializer.png)]
let url = URL(string: "https://www-tc.pbs.org/wnet/nature/files/2017/09/x1WLcZn-asset-mezzanine-16x9-6kkb4dA.jpg")
iv.kf.setImage(with: url, options: options)
注意点
既にjpgでキャッシュしている場合はそっちを引いてきてしまうので注意
参考文献
こちらのissueで解消しました。