iOS CollectionView:显示View,然后下载图片,再显示图片

Posted

技术标签:

【中文标题】iOS CollectionView:显示View,然后下载图片,再显示图片【英文标题】:iOS CollectionView: Display View, then download images, then display images 【发布时间】:2015-02-27 15:37:35 【问题描述】:

我有一个集合视图,其中包含每个部分中的单元格,每个单元格中都有一个图像。

集合视图可能包含 20 个或更多单元格。

我想将互联网上的图像加载到单元格中。问题是这可能需要几秒钟,我希望即使图像尚未完全下载也能显示 collectionView。

为集合视图提供了一个包含 URL 的数组,到目前为止,我一直在 collection view cellforitematindexpath 中从 Internet 下载

但是,只有在加载完所有单元格后才能看到视图,而且由于每次调用 collection view cellforitematindexpath 都会下载一张图片,如果从 URL 中提取 20 张图片,则需要很长时间。

我可以做些什么来显示视图,然后下载图像,然后显示它们?

希望我让自己可以理解,如果不是,请询问!

谢谢!

C

【问题讨论】:

你见过SDWebImage吗?将使您的生活轻松 100 倍:github.com/rs/SDWebImage 另一种选择是 AFNetworking。 AFNetworking 在 UIImageView 上有一些类别可以满足您的需求:github.com/AFNetworking/AFNetworking/blob/master/… 【参考方案1】:

是的,您可以使用 SDWebImage(如上文评论中所述)。 您可能会遇到的另一个有趣的方面是,如果图像尚未加载并且用户滚动视图,则可能是 dequeueReusableCellWithReuseIdentifier:forIndexPath 的问题,因此最好下载图像 throw id <SDWebImageOperation>

准备重用将是这样的:

- (void)prepareForReuse

    [super prepareForReuse];

    if (self.imageOperation)
        [self.imageOperation cancel];

    self.imageOperation = nil;

负载会是这样的:

SDWebImageManager *manager = [SDWebImageManager sharedManager];    
self.imageOperation = [manager downloadWithURL:[NSURL URLWithString:urlString]
                                      options:SDWebImageRetryFailed
                                     progress:nil
                                    completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) 
                                        if (image)
                                        
                                            self.imageView.image = image;
                                        
                                    ];

【讨论】:

我是否需要将我的 CollectionView 设为 UICollectionReusableView?这意味着我需要摆脱我的 loadView 方法? 答案中描述的方法应该驻留在 UICollectionViewCell 子类中,而不是 UICollectionView 中,是的,您应该默认使用可重用单元格。

以上是关于iOS CollectionView:显示View,然后下载图片,再显示图片的主要内容,如果未能解决你的问题,请参考以下文章

如何在ios中创建没有tableview和collection view的行

CollectionView 内的 iOS TableView 有时会显示不正确的数据

如何在 iOS 中避免/禁用 Collection View 的垂直滚动

如何在 Swift 中的 Collection View 上显示图像数组

ios collectionview 怎么获取header的indexpath

带有collectionview子视图的ios uiviewcontroller不显示单元格