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