使用sdwebimage ios从以前的单元格中获得华丽的图像?

时间:2016-08-04 07:55:41

标签: ios objective-c uitableview uiimageview sdwebimage

我使用SDWEBImage库在tableview下的scrollview中显示图像。

我的问题是,图像完全加载,但是当我滚动tableview时,前一个单元格中的华丽图像或复制图像显示在Imageview中。我以编程方式创建了如下图像视图:

enter image description here

我的代码如下:

for (NSString *stringurl in [[[Arr objectAtIndex:indexPath.row]valueForKey:@"sports"]valueForKey:@"image"]) {

            UIImageView *yourImageView =[[UIImageView alloc] initWithFrame:CGRectMake(x,10,40,40)];

            NSURL *urlimg=[NSURL URLWithString:stringurl];

           [yourImageView sd_setImageWithURL:urlimg
                                placeholderImage:[UIImage imageNamed:@"placeholder"] options:indexPath.row ? SDWebImageRefreshCached : 0];
      [cell.arenaimgscroll addSubview:yourImageView];

            x = x + 50;
            if (stringurl==NULL) {
                cell.arenaimgscroll.hidden=YES;
            }
            else{
                cell.arenaimgscroll.hidden=NO;

            }
        }

1 个答案:

答案 0 :(得分:0)

只是简短的概述,所以你得到答案

UITableView经过高度优化,因此只在内存中保留屏幕上可见的行。现在,所有行单元格都缓存在池中并被重用而不是重新生成。每当用户滚动UITableView时,它会在Pool中添加刚刚隐藏的行,并重新使用它们作为可见行。

所以,现在,回答你的问题

滚动UITableView时,会为每个indexPath再次调用UITableView数据源方法,因此dequeueReusableCellWithIdentifier会为您提供已添加UIImageView的缓存单元格,但是 你再次添加UIImageView(资源来源)

更好的解决方案 在界面构建器中添加imageView

您可以检查,如果已添加imageView,则跳过再次添加它的步骤

<强>更新

注意 此解决方案未进行优化,因为您尚未重复使用图片元素,但会解决您的问题。

将此脚本添加到for循环上方,这是用于从滚动视图(arenaimgscroll)清除旧图像(已重用)

    [cell.arenaimgscroll.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)];

    for (NSString *stringurl in [[[Arr objectAtIndex:indexPath.row]valueForKey:@"sports"]valueForKey:@"image"]) {
   //YOUR CODE
}