[英]How to decide whether to assign image to UIImageView or not, once it finish downloading using SDWebImage?
SDWebImage
是UIImageView
的扩展。 有一种方法:
sd_setImageWithURL(NSURL(string: url), placeholderImage: placeholder, options: options, completed: { image, error, cache, url in
//do sth after it is completed
})
但是在completed
块中,我无法决定是否允许SDWebImage
分配图像。 它是自动分配的,无需询问开发人员是否允许这样做。 当我在滚动表时将图像分配给UITableViewCell
UIImageView
时出现问题。
显然,在完成下载之前,该单元可能会重用于不同的行,最后可能会有不同的映像。
如何使用此库修复它?
在以下问题中: 从UITableView单元内的URL加载异步图像-滚动时图像变为错误图像 ,有一个答案是SDWebImage
解决了此问题,但这不是真的,或者我错过了。
这不是必须的。 如果查看UIImageView类别的实现,您将看到以下内容:
- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock {
[self sd_cancelCurrentImageLoad];
objc_setAssociatedObject(self, &imageURLKey, url, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
这说明您在调用setImage的那一刻取消了与图像视图实例关联的下载。 由于UITableView重用了其视图,因此这应该不是问题。 了解他们如何将imageView和URL关联在一起。
您的问题可能是您没有将imageView的image属性每次都重置为nil。 因此,在cellForRow内部,您可能想要:
cell.imageView.image = nil
cell.imageView.sd_setImageWithURL(...)
当您开始新的加载时,图像视图会取消任何当前加载。 因此,如果重新使用图像视图,则可以避免此问题。
如果由于某种原因没有设置新图像,则可以调用sd_cancelCurrentImageLoad
并显式设置占位符图像。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.