collectionview reloadData时如何自定义UICollectionView过渡动画?

Posted

技术标签:

【中文标题】collectionview reloadData时如何自定义UICollectionView过渡动画?【英文标题】:How to custom UICollectionView transition animation when collectionview reloadData? 【发布时间】:2014-08-20 09:39:17 【问题描述】:

我有一个 UICollectionView,它有 12 个单元格。从网络检索数据后,调用 UICollectionView 的 -reloadData 并显示另外 12 张图像。 我的问题是:无论如何我可以在 UICollectionView 重新加载数据时添加动画,例如从 reloadData 之前的旧图像到 reloadData 之后的新图像的过渡动画!

任何建议都会有很大帮助!谢谢!

【问题讨论】:

【参考方案1】:

二是三种方式:

collection view 提供的普通动画: [self.collectionView reloadSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, self.collectionView.numberOfSections)]];

(关于这个主题的更多讨论在这里找到:SO discussion)

但您也可以使用 ios 中的屏幕截图 API 来获取至少当前可见的一些视图副本,并以您喜欢的任何方式为它们设置动画!

要获取集合视图的当前可见单元格,您可以调用:

[collectionView visibleCells]

您可以为其中的每一个创建一个快照视图:

UIView* singleCellSnapshot = [cell snapshotViewAfterScreenUpdates:NO];

现在以您喜欢的任何方式为它们制作动画!

您应该为这些动画创建“超级视图”,您可以在其中将快照添加为子视图。还要确保在启动动画时将单元格的位置坐标转换为初始设置的快照:

UIView* animationContainer = [[UIView alloc] init... ]; //probably already done in  storyboard!

singleCellSnapshot.center = [cell.superview convertPoint:cell.center toView:animationContainer];

[animationContainer addSubview:singleCellSnapshot];

【讨论】:

非常感谢,我以后会尝试这些方法!^_^ 嗨,尼尔斯·齐恩!我已经尝试了第一个,在 -performBatchUpdates: 我调用 -reloadSections:,当 collectionView 重新加载数据时它真的动画了。但是,动画不是我想要的。我想自定义动画,怎么办? 这就是我给你第二部分的原因。如果您想要自定义动画,则必须编写它..

以上是关于collectionview reloadData时如何自定义UICollectionView过渡动画?的主要内容,如果未能解决你的问题,请参考以下文章

CollectionView:scrollToItem、reloadData 和调度队列

在 UICollectionViewDelegate#collectionView:didSelectItemAtIndexPath 中调用 UICollectionView#reloadData:隐

collectionview reloadData时如何自定义UICollectionView过渡动画?

collectionview reloaddata 刷新失效或者 不走cellforrow刷新cell

collectionview reloaddata 刷新失效或者 不走cellforrow刷新cell

collectionview reloaddata 刷新失效或者 不走cellforrow刷新cell