1
によって私はSDWebImageを使用して、ImageViewのについて問題を抱えています。
私はユーザーのイメージを変更し、すでに新しいユーザーのイメージURLを取得していますが、このViewControllerにプッシュすると、古いイメージが最初に表示され、新しいイメージに変更されます。
私の何が悪いですか?おかげさまで
var avatar:String = "" // previous VC data pass to here
var photoImageView:UIImageView = {() -> UIImageView in
let ui = GeneratorImageView()
ui.backgroundColor = UIColor.clear
ui.layer.masksToBounds = true
ui.contentMode = .scaleAspectFill
return ui
}()
override func viewDidLoad() {
super.viewDidLoad()
iconImageFromUrl(imageView: iconImageView, url: avatar, isResize: false)
}
func iconImageFromUrl(imageView:UIImageView, url:String,isResize:Bool) {
imageView.setShowActivityIndicator(true)
imageView.setIndicatorStyle(.gray)
imageView.sd_setImage(with: URL(string:url), placeholderImage: nil, options: .lowPriority, progress: nil
, completed: { (image, error, cacheType, url) in
guard image != nil else{
imageView.image = resizeImage(image: #imageLiteral(resourceName: "defaultIcon"), newWidth: 50)
return
}
DispatchQueue.global().async {
let data = try? Data(contentsOf: url!) //make sure your image in this url does exist, otherwise unwrap in a if let check/try-catch
if data != nil
{
if let image = UIImage(data: data!)
{
DispatchQueue.main.async {
if isResize == true{
imageView.image = resizeImage(image: image, newWidth: 250)
}else{
imageView.image = image
}
}
}
}
}
})
}
私はIMAGEURLを取得するために、非同期APIを呼び出すので、それが起こるのだろうビューが表示され、画像は変化しません。 – Beginnerrrrrr
@Beginnerrrrrr:はい、あなたは正しいです。ここでの問題は、SDWebImageCacheによって毎回イメージがキャッシュ/メモリからロードされた後のresizeImageです。それまでは画像を表示しないように選択できますが、毎回画像のサイズ変更の問題は解決しません。必要に応じて、画像URLにクエリーパラメータとしてwidthを追加して、サイズ変更された画像をSDWebImageCacheに保存することができます。 –