LoginSignup
4
2

More than 5 years have passed since last update.

KingfisherでRoundCornerImageProcessor使うと白い背景色になる問題

Last updated at Posted at 2017-12-13

ImageProcessor

Kingfisherは取得した画像を編集してから適用するImageProcessorがある

let cirlceImageProcessor = RoundCornerImageProcessor(cornerRadius: CGFloat.greatestFiniteMagnitude)
let options: KingfisherOptionsInfo = [.processor(cirlceImageProcessor)]
setImage(with: resource, options: options)

で、こんな感じで書くと角丸を付けて表示出来る。

Simulator Screen Shot - iPhone 6 - 2017-12-13 at 23.11.22.png

背景が白くなる問題

Simulator Screen Shot - iPhone 6 - 2017-12-13 at 23.10.12.png

稀にこのような状態になることがある

原因

原因は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で解消しました。

4
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2