所以问题很简单。我想制作一个类似Instagram的屏幕,用户可以在从底部向上滚动的同时无限地查看图像。
当用户到达底部时,我设法下载下一页的图像。
我在dequeueReusableCellWithReuseIdentifier
中使用cellForItemAtIndexPath
,我使用 AsyncImageView Library异步下载图片。
问题是 - 向上/向下滚动时,单元格中的图像开启/关闭。第一个单元格中的均值显示旧图像,然后在异步下载后显示新图像。我想要一个像Instagram这样的平滑效果,其中新的单元格在底部附加为空白单元格,然后加载图像。
这是我的代码。
首先在viewWillAppear
[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;
}
总结一下,请watch this video of my app在模拟器中运行。
答案 0 :(得分:0)
你可以这样做:
答案 1 :(得分:0)
所以我最终得到了以下解决方案
AsyncImageView
库。cellForItemAtIndexPath
方法中,在设置新图像之前将单元格图像设置为nil
UIImageView+AFNetworking
方法下载cellForItemAtIndexPath
-(void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholderImage;
现在一切都很好。我已经实现了平滑滚动效果,图像开/关问题也解决了。
答案 2 :(得分:0)
SDWebImage是更好的图书馆,可以得到你想要的东西。它有下载和缓存,效果很好。开箱即用,易于集成。
或者,您可以使用FastImageCache + AFNetworking来获得最佳性能和UI的FPS。这将需要更多的代码,但结果令人印象深刻。你真的应该看看它。