繁体   English   中英

使用SDWebImage完成下载后,如何确定是否将图像分配给UIImageView?

[英]How to decide whether to assign image to UIImageView or not, once it finish downloading using SDWebImage?

SDWebImageUIImageView的扩展。 有一种方法:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM