2016-10-10 75 views
1

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

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

除了判断模式的转变,是否有任何其他的方式来避免闪烁?围绕reloadData

闪烁步骤:reloadData之前

  1. 显示图像;

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

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

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

  5. 更改为显示placeholderImage;

  6. 加载磁盘映像。

回答

0
- (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; 
     }); 
    } 
    ...... 
} 
相关问题