gpt4 book ai didi

swift - collectionview 仅在 cellForItemAtIndexPath 中下载一张图像

转载 作者:行者123 更新时间:2023-11-28 12:35:49 25 4
gpt4 key购买 nike

这是代码。这是在我的 UICollectionViewDataSource 类中。

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let identifier = "UICollectionViewCell"
let photo = photos[indexPath.row]
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: identifier, for: indexPath) as! PhotoCollectionViewCell
let url = ImageUploaderAPI.urlForPhotoPath(photoTitle: photo.remoteURL)

if (photo.image == nil) {
Alamofire.download(url).downloadProgress { progress in
print("Download Progress: \(progress.fractionCompleted)")
}
.responseData { response in
if let data = response.result.value {
let image = UIImage(data: data)
photo.image = image!
cell.updateWithImage(image: image)
print("Downloaded: " + url.absoluteString)
collectionView.reloadData()
}
}
} else {
cell.updateWithImage(image: photo.image)
}
return cell
}

progress.fractionCompleted 显示图像正在下载,但我不确定为什么没有图像更新。是因为 Alamofire 是如何异步工作的吗?任何建议将不胜感激。

最佳答案

这里有 3 种可能的解决方案。第一个是因为后台线程问题。不只是 collectionView.reloadData,尝试使用:

DispatchQueue.main.async { 
collectionView.reloadData
}

另一个可能的解决方案是 .resume 问题?您可能想像下面的示例一样尝试添加 .resume:

if (photo.image == nil) {
Alamofire.download(url).downloadProgress { progress in
print("Download Progress: \(progress.fractionCompleted)")
}
.responseData { response in
if let data = response.result.value {
let image = UIImage(data: data)
photo.image = image!
cell.updateWithImage(image: image)
print("Downloaded: " + url.absoluteString)
collectionView.reloadData()
}
}.resume
} else {
cell.updateWithImage(image: photo.image)
}
return cell
}

我的第三个也是最后一个解决方案是简单地摆脱 if (photo.image == nil) {

希望对你有帮助

关于swift - collectionview 仅在 cellForItemAtIndexPath 中下载一张图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40961941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com