簡體   English   中英

快速使用SdWebImage和Image Change

[英]Using SdWebImage and Image Change immediately by swift

這是問題視頻

我使用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
                        }
                    }
                }
            }
        }
})
}

sd_setImage方法寫在UIImageView的類別內。 下載圖像后,它會自行將圖像設置在UIImageview上,並在完成關閉操作中也返回下載/緩存的UIImage

您不需要從imageUrl創建數據並再次設置它。 如果要調整圖像大小,可以在返回的圖像上進行調整。

另外,您無需檢查圖像nil即可設置默認圖像,只需將調整大小后的默認圖像作為占位符圖像傳遞即可

imageView.sd_setImage(with: URL(string:url), placeholderImage: resizeImage(image: #imageLiteral(resourceName: "defaultIcon"), newWidth: 50), options: .lowPriority, progress: nil
, completed: { (image, error, cacheType, url) in
    guard image != nil else {
        return
    }

    if isResize {
          imageView.image = resizeImage(image: image, newWidth: 250)
    } })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM