在 CollectionView Objective-C 上处理加载和刷新

Posted

技术标签:

【中文标题】在 CollectionView Objective-C 上处理加载和刷新【英文标题】:Handle loading & refreshing on a CollectionView Objective-C 【发布时间】:2017-02-23 07:12:56 【问题描述】:

我正在构建一个 Xcode 应用程序,该应用程序具有垂直滚动的 UICollectionView 视图,其中包含大型 ImageView,类似于 Instagram。这个 Collection View 最初将非常小的图像加载到每个 UICollectionViewCell 中的 ImageView 中,从而使应用程序加载速度更快,并使各个单元格的加载瞬间完成。

我最近对应用程序进行了更改,使 Collection View Cells 将更大的图像加载到其 Image View 中,这会导致某些单元格中出现 2 件事:

1) ImageView 为空白的等待时间,直到图像被加载

2) 在加载新图像时,在已从队列中重复使用的单元格中临时重复旧图像

下面是我用来初始化单元格的代码:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

    UICollectionViewCell *cell;
    NSString *CellIdentifier;
    UIImageView *thumbnailImage;

    CellIdentifier = @"FollowersFeed"; 
    cell = [collectionView
dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
    thumbnailImage=(UIImageView *)[cell viewWithTag:1];
    dict=[follwerFeed objectAtIndex:indexPath.row];

    NSString *nurl=[dict valueForKey:@"video"];
    [thumbnailImage setImageWithURL:[NSURL URLWithString:nurl]];

    //........

    return cell;


为了用这些新的大图修复这个应用程序的功能,我需要解决加载问题

1) 在加载集合视图中的图像视图时显示活动指示器旋转。

2) 在队列中重用单元格之前,从先前的 Image View 中删除图像链接。

我相信,如果我能弄清楚如何做到这两点,那么应用程序的滚动现在将像使用较小的图像一样无缝地工作

【问题讨论】:

【参考方案1】:

你可以试试https://github.com/rs/SDWebImage - 作为 UIImageView 类别支持缓存的异步图片下载器

易于使用:

#import <SDWebImage/UIImageView+WebCache.h>
...
[imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
             placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

【讨论】:

【参考方案2】:

你可以试试 NSURLRequest

NSURLRequest *request = [NSURLRequest requestWithURL:imageUrl];
[NSURLConnection sendAsynchronousRequest:request
                                   queue:[NSOperationQueue mainQueue]
                       completionHandler:^(NSURLResponse * response,
                                           NSData * data,
                                           NSError * error) 
                           if (!error)
                               cell.thumbnailImage.image = [UIImage imageWithData:data];
                           
                       ];

【讨论】:

以上是关于在 CollectionView Objective-C 上处理加载和刷新的主要内容,如果未能解决你的问题,请参考以下文章

无法在 collectionView 内调用 dequeueReusableCellWithReuseIdentifier(collectionView:collectionViewLayout:si

CollectionView 在 tableViewCell 数据显示

CollectionView 中的 CollectionView:使用 didSelectItemAt 执行Segue

CollectionView 里面的 CollectionView | CollectionViewCell 自动布局错误

Collectionview 的底部约束未在运行时更新

当collectionView折叠时隐藏collectionView内容