Ios UICollectionView退出队列ReusableCellWithReuseIdentifier异步映像加载问题
所以问题很简单。我想制作一个类似Instagram的屏幕,用户可以在从底部向上滚动的同时无限地查看图像 当用户到达底部时,我设法下载了下一页的图像。 我在我的Ios UICollectionView退出队列ReusableCellWithReuseIdentifier异步映像加载问题,ios,objective-c,asynchronous,uicollectionview,Ios,Objective C,Asynchronous,Uicollectionview,所以问题很简单。我想制作一个类似Instagram的屏幕,用户可以在从底部向上滚动的同时无限地查看图像 当用户到达底部时,我设法下载了下一页的图像。 我在我的cellForItemAtIndexPath中使用了dequeueReusableCellWithReuseIdentifier,并且我正在使用异步下载图像 问题是-当向上/向下滚动时,单元格中的图像会打开/关闭。表示首先单元格显示旧图像,然后在异步下载后显示新图像。我想要一个平滑的效果,比如Instagram,在底部添加新的单元格作为空白
cellForItemAtIndexPath
中使用了dequeueReusableCellWithReuseIdentifier
,并且我正在使用异步下载图像
问题是-当向上/向下滚动时,单元格中的图像会打开/关闭。表示首先单元格显示旧图像,然后在异步下载后显示新图像。我想要一个平滑的效果,比如Instagram,在底部添加新的单元格作为空白单元格,然后加载图像
这是我的密码
视图中的第一个将出现
[self.photosCollectionView registerNib:[UINib nibWithNibName:kPhotoCell bundle:nil] forCellWithReuseIdentifier:kCollectionViewCellId];
然后
-(UICollectionViewCell *)collectionView:(UICollectionView *)paramCollView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [paramCollView dequeueReusableCellWithReuseIdentifier:kCellectionViewCellId forIndexPath:indexPath];
PhotoBO *singlePhoto = [self.photosArray objectAtIndex:indexPath.row];
[((AsyncImageView *)[cell viewWithTag:10]) setImageURL:[PhotoBL getPhotoURL:singlePhoto]];
return cell;
}
总而言之,请在模拟器中运行。您可以执行以下操作:
所以我最终得到了以下解决方案
- 从我的代码中删除了
库AsyncImageView
- 用于网络呼叫和异步映像下载
- 在
方法中,在设置新图像之前,将单元格图像设置为cellForItemAtIndexPath
nil
- 使用以下
方法在UIImageView+AFNetworking
cellForItemAtIndexPath
-(void)setImageWithURL:(NSURL*)url占位符图像:(UIImage*)占位符图像代码>
现在一切都好了。我已经实现了平滑的滚动效果,图像打开/关闭的问题也得到了解决。是获得所需图像的更好库。它有下载和缓存两种功能,效果非常好。开箱即用,易于集成
或者,您可以使用+AFNetworking来获得最佳性能和UI的FPS。这将需要更多的代码,但结果令人印象深刻。你真的应该看看。我一定要试试这个。以前,我在许多项目中使用了AsyncImageView
,但在这里它无法解决我的问题。我以前听说过SDWebImage
,但从未有机会尝试过。