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 上显示图像数组