tableView滑动停止加载图片---官方代码lazyTableImage解析

仔细观察你会发现,只有在滑动停止的时候才会加载图片。

tableView滑动停止加载图片---官方代码lazyTableImage解析_第1张图片
1.gif

实现起来其实很简单


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = nil;
    
    NSUInteger nodeCount = self.entries.count;//self.entries是放cellModel的数组
 
        cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

        // Leave cells empty if there's no data yet
        if (nodeCount > 0)
        {
            // 从数组中取出model 给cell赋值
            AppRecord *appRecord = self.entries[indexPath.row];
            cell.textLabel.text = appRecord.appName;
            cell.detailTextLabel.text = appRecord.artist;

            if (!appRecord.appIcon)//如果cell的图片不存在
            {      //判断tableView此刻有没有在滑动,如果未在滑动中
                if (self.tableView.dragging == NO && self.tableView.decelerating == NO)
                {  //那么下载新的images赋给cell
                    [self startIconDownload:appRecord forIndexPath:indexPath];
                }
                // 使用占位图
                cell.imageView.image = [UIImage imageNamed:@"Placeholder.png"];                
            }
            else//如果cell的图片存在
            {
               cell.imageView.image = appRecord.appIcon;
            }
        }
    return cell;
}

//在代理方法中检测到滑动结束,加载图片
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    if (!decelerate)
 {  
        [self loadImagesForOnscreenRows];
    }
}

//在代理方法中检测到滑动减速结束,加载图片
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    [self loadImagesForOnscreenRows];
}

- (void)loadImagesForOnscreenRows
{
    if (self.entries.count > 0)
    {  //获取可见区域所有cell的indexPath数组
        NSArray *visiblePaths = [self.tableView indexPathsForVisibleRows];
         
        for (NSIndexPath *indexPath in visiblePaths)
        {  //遍历每个cell的model
            AppRecord *appRecord = self.entries[indexPath.row];
               //如果image不存在
            if (!appRecord.appIcon)     
            {   //才下载
                [self startIconDownload:appRecord forIndexPath:indexPath];
            }
        }
    }
}

以上是全部核心代码
官方的demo下载地址:https://developer.apple.com/library/content/samplecode/LazyTableImages/Introduction/Intro.html

你可能感兴趣的:(tableView滑动停止加载图片---官方代码lazyTableImage解析)