动画切换 CollectionViewLayout

Posted

技术标签:

【中文标题】动画切换 CollectionViewLayout【英文标题】:Animate switching CollectionViewLayout 【发布时间】:2019-03-13 09:55:36 【问题描述】:

我目前正在开发一种功能,可以在 2 个不同的 CollectionViewLayouts 之间为 UICollectionView 切换。切换工作得很好,布局使用具有不同笔尖的相同单元格类。我希望他们通过动画(网格样式到列表样式并返回)从一个移动到另一个。目前我已经使用 Hero 过渡框架集成了一些动画。

我想要实现的是列表和网格布局中都存在的图像以动画到它的新原点,以便事务看起来很顺利。

是否可以通过 Hero 实现我想要的行为?在选择哪个效果很好时,我已经向单元格添加了动画。

这是我用来在两种布局之间切换的代码

isListView = !isListView
setupCollectionViewCellNib(nibName: collectionItem)
collectionView.collectionViewLayout = isListView ? ListLayout(view: view) : GridLayout(view: view)
collectionView.reloadData()

我希望有人能指出我正确的方向,即使使用 Hero 无法做到这一点。

【问题讨论】:

【参考方案1】:

UICollectionView 有一个setCollectionViewLayout(_ layout: UICollectionViewLayout, animated: Bool) 函数

let layout = isListView ? ListLayout(view: view) : GridLayout(view: view)
collectionView.setCollectionViewLayout(layout, animated: true)

【讨论】:

这不会更新用于显示单元格的笔尖。因此,它会在某种程度上对其进行动画处理,最终的布局是错误的。即使打电话给reloadData()

以上是关于动画切换 CollectionViewLayout的主要内容,如果未能解决你的问题,请参考以下文章

参数标签 '(collectionviewlayout:)' 不匹配任何可用的重载

collectionViewLayout.collectionViewContentSize 返回错误值?

具有多个 CollectionViewLayout 的单个 UICollectionView。为啥布局混乱?

UICollectionView 和它的 collectionViewLayout 之间是不是存在保留周期?

无法在 collectionView 内调用 dequeueReusableCellWithReuseIdentifier(collectionView:collectionViewLayout:si

为 UICollectionView 设置一个新的 collectionViewLayout 给空白屏幕