我在网格中有数据,一旦用户触摸某个项目,布局就会发生变化,并且这些项目会对新布局产生动画。
我目前正在使用UICollectionViewFlowLayout
作为网格。当然,我可以在底部为条带添加新视图,在顶部添加详细视图,但我想将项目从网格设置为条带。
我可以使用UICollectionViewFlowLayout
优雅地实现此行为,还是必须为此创建自定义布局和自定义转换(这是我想避免的)。
答案 0 :(得分:1)
执行此操作的最持久方法是将UICollectionViewLayout
子类化为第二个布局。但是,您可以在没有子类化的情况下执行此操作,尽管它可能看起来更复杂。
我们的想法是复制绿色单元格的内容并将它们设置到集合视图上方上面的位置 - 而不是集合视图中的单元格。您将使用[collectionView layoutAttributesForItemAtIndexPath:selectedIndexPath].frame
获取动画起点的帧,并调整集合视图的内容偏移量。当然,您必须使用[collectionView deleteItemsAtIndexPaths:@[selectedIndexPath]]
从集合视图中删除绿色单元格。
在此期间,创建另一个UICollectionViewFlowLayout
实例。此实例将scrollDirection
设置为水平。在UICollectionViewDelegateFlowLayout
方法中,将该部分的插入设置为要显示单元格的区域 - 即top
的非常大的值。(您不必设置集合视图框架。)然后,您将转换到此布局。
我认为你会发现子类化UICollectionViewLayout
将更加直接和封装。例如,如果您想在另一个上下文中重新创建此演示文稿,那么使用子类布局会更容易。