当tableView reloadData时,单元格中的UIImageView闪烁

时间:2016-10-10 14:09:00

标签: ios flicker sdwebimage reloaddata

我知道当应用程序进入后台时,SDWebImage将清除内存缓存。 因此,当app进入前景时,滚动tableView进行刷新,然后reloadData,即使数据没有改变,单元格中的imageView也会闪烁。

[cell.toolsImageView sd_setImageWithURL:[NSURL URLWithString:toolsModel.iconUrl] placeholderImage:[UIImage imageNamed:@"morentu_circle"] options:SDWebImageRetryFailed];

除了判断模型的变化外,还有其他方法可以避免闪烁吗?

flicker围绕reloadData步骤:

  1. 在reloadData之前显示图像;

  2. reloadData和imageView使用网址重置图片;

  3. 在SD内存缓存中找到图像,但未找到;

  4. 在SD磁盘缓存中查找图像,将其设为异步;

  5. 更改为显示占位符图像;

  6. 加载磁盘映像。

1 个答案:

答案 0 :(得分:-1)

- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock {
    [self sd_cancelCurrentImageLoad];

    NSURL *oldURL = [self sd_imageURL];

    objc_setAssociatedObject(self, &imageURLKey, url, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

    if (!(options & SDWebImageDelayPlaceholder) && (oldURL == nil || ![oldURL.absoluteString isEqualToString:url.absoluteString])) {
        dispatch_main_async_safe(^{
            self.image = placeholder;
        });
    }
    ......
}