如何在Lazy Loading上加载更多图像

时间:2013-03-12 08:42:11

标签: iphone ios lazy-loading

在mu UITable视图中,我正在显示来自服务器的图像。因为我正在使用延迟加载。 当行在屏幕上时,我可以加载图像。如何增加加载的图像数量。

喜欢 - 这是第一次看到3个表格单元格,并且这些单元格上的图像加载了2秒延迟。如何同时加载下3行的图像?

我正在使用以下功能加载图片

- (void)loadImagesForOnscreenRows
  {
    if ([imageArray count] > 0)
    {
    NSArray *visiblePaths = [tableView indexPathsForVisibleRows];
    for (NSIndexPath *indexPath in visiblePaths)
    {
        AppRecord *appRecord = [dataArray objectAtIndex:indexPath.row];

        if (!appRecord.appIcon) // avoiding the imagen download if already has an image
        {
            [self startIconDownload:appRecord forIndexPath:indexPath];
          }
        }
      }
    }

2 个答案:

答案 0 :(得分:0)

你做事的方式

您可以通过在背景下载图片来完成此操作,完成后,您可以将NSNotification发布到方法以重新加载tableView。但是在下载图像时,您必须向用户显示加载视图或其他内容,以告诉他正在下载图像。

建议

我不建议您这样做,最好的方法是使用SDWebImage在后​​台独立下载每个内容,并对tableView做出更快的响应。在下载图像时,您会显示默认图像(占位符),在下载图像后,此功能会将其设置为需要的位置:

您只需要#import <SDWebImage/UIImageView+WebCache.h>到项目中,并且只需使用以下代码即可在下载图像时定义占位符:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
        static NSString *CellIdentifier;
        CustomCell *cell = [tableview dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

        MyObject *object = (MyObject *)[self.list.array objectAtIndex:indexPath.row];

        //Here is where you set your image URL and it's placeholder
        [cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
                       placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

        return cell;
}

它还可以缓存下载的图像并为您提供出色的性能。

答案 1 :(得分:-1)

为什么使用此代码,您只需更改键值以下即可完美地使用非限制图像。

kIDStr     = @"id";  
kNameStr   = @"im:name";  
kImageStr  = @"im:image";  
kArtistStr = @"im:artist";  
kEntryStr  = @"entry";