当滚动甚至存储在NSCache中时,UIImage始终保持加载状态-Swift

时间:2018-08-02 03:59:26

标签: swift uicollectionview nsurlsession nscache

我是iOS编程的新手。我正在创建一个简单的应用程序,该应用程序从特定链接(. ~/.nvm/nvm.sh)中加载图像。图像已完全从服务器下载,并照常在firestore的每个单元格上可见。但是问题是当我向上或向下滚动时,这些图像会再次加载。我认为它再次开始下载,因为当我关闭Internet连接时,这些图像不再被加载。

这是我在每个单元格中设置图像的方式

collectionview

以下是加载图片的样子:override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! CollectionCell let explore = dataAppend[indexPath.item] //cell.imageDisplay.text = explore.title if let imageUrl = explore.image { cell.imageDisplay.loadImageWithData(urlString: imageUrl) } //print(explore.image) return cell }

loadImageWithData(urlString: imageUrl)

2 个答案:

答案 0 :(得分:2)

 var imageCache = NSMutableDictionary()

class CustomImageView: UIImageView {

func loadImageUsingCacheWithUrlString(urlString: String) {

    self.image = nil

    if let img = imageCache.valueForKey(urlString) as? UIImage{
        self.image = img
         return 
    }
        let session = NSURLSession.sharedSession()
        let task = session.dataTaskWithURL(NSURL(string: urlString)!, completionHandler: { (data, response, error) -> Void in

            if(error == nil){

                if let img = UIImage(data: data!) {
                    imageCache.setValue(img, forKey: urlString)    // Image saved for cache
                    DispatchQuee.main.asyn{
                       self.image = img

                }


            }
        })
        task.resume()
    }
}

}

答案 1 :(得分:1)

您可以改用Kingfisher库,处理图像缓存本身,您无需担心。有关实现,请参见: https://github.com/onevcat/Kingfisher

只需一行代码,您就可以设置图片

imgView.kf.setImage(with: ImageResource(downloadURL: URL(string: imgUrl)!))