【问题标题】:UIImageView in cell flicker when tableView reloadData当tableView reloadData时,单元格中的UIImageView会闪烁
【发布时间】:2016-10-25 18:13:47
【问题描述】:

我知道当应用程序进入后台时,SDWebImage 会清除内存缓存。 所以,当app进入前台,滚动tableView刷新,然后reloadData,即使数据没有变化,cell中的imageView也会闪烁。

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

除了判断机型变化,还有什么方法可以避免闪烁吗?

reloadData 周围闪烁步数:

  1. 在 reloadData 之前显示图像;

  2. reloadData 和 imageView 用 URL 重置图像;

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

  4. 在 SD 磁盘缓存中查找图像,异步获取;

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

  6. 加载磁盘映像。

【问题讨论】:

    标签: ios flicker sdwebimage reloaddata


    【解决方案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;
            });
        }
        ......
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-11
      • 1970-01-01
      • 2012-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多