Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UICollectionView退出队列ReusableCellWithReuseIdentifier异步映像加载问题_Ios_Objective C_Asynchronous_Uicollectionview - Fatal编程技术网

Ios UICollectionView退出队列ReusableCellWithReuseIdentifier异步映像加载问题

Ios UICollectionView退出队列ReusableCellWithReuseIdentifier异步映像加载问题,ios,objective-c,asynchronous,uicollectionview,Ios,Objective C,Asynchronous,Uicollectionview,所以问题很简单。我想制作一个类似Instagram的屏幕,用户可以在从底部向上滚动的同时无限地查看图像 当用户到达底部时,我设法下载了下一页的图像。 我在我的cellForItemAtIndexPath中使用了dequeueReusableCellWithReuseIdentifier,并且我正在使用异步下载图像 问题是-当向上/向下滚动时,单元格中的图像会打开/关闭。表示首先单元格显示旧图像,然后在异步下载后显示新图像。我想要一个平滑的效果,比如Instagram,在底部添加新的单元格作为空白

所以问题很简单。我想制作一个类似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;
}
总而言之,请在模拟器中运行。

您可以执行以下操作:

  • 仅在NSDefaultRunLoopMode下下载图像,因为当您滚动集合视图时,runloop模式将设置为UITrackingRunLoopMode
  • 缓存下载的图像
  • 重复使用时请清洁电池

  • 所以我最终得到了以下解决方案

    • 从我的代码中删除了
      AsyncImageView
    • 用于网络呼叫和异步映像下载
    • cellForItemAtIndexPath
      方法中,在设置新图像之前,将单元格图像设置为
      nil
    • 使用以下
      UIImageView+AFNetworking
      方法在
      cellForItemAtIndexPath
    -(void)setImageWithURL:(NSURL*)url占位符图像:(UIImage*)占位符图像

    现在一切都好了。我已经实现了平滑的滚动效果,图像打开/关闭的问题也得到了解决。

    是获得所需图像的更好库。它有下载和缓存两种功能,效果非常好。开箱即用,易于集成


    或者,您可以使用+AFNetworking来获得最佳性能和UI的FPS。这将需要更多的代码,但结果令人印象深刻。你真的应该看看。

    我一定要试试这个。以前,我在许多项目中使用了
    AsyncImageView
    ,但在这里它无法解决我的问题。我以前听说过
    SDWebImage
    ,但从未有机会尝试过。