在 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 自动布局错误