相同数据的不同视图之间的转换概念

Posted

技术标签:

【中文标题】相同数据的不同视图之间的转换概念【英文标题】:Concept for transition between different views of the same data 【发布时间】:2013-06-26 15:47:28 【问题描述】:

我在网格中有数据,一旦用户触摸一个项目,布局就会发生变化,并且项目会根据新布局进行动画处理。

我目前正在为网格使用UICollectionViewFlowLayout。当然,我可以为底部的条形图和顶部的细节视图添加新视图,但我想将网格中的项目动画化到条形图。

我可以使用UICollectionViewFlowLayout 优雅地实现此行为,还是必须为此创建自定义布局和自定义过渡(这是我想避免的)。

【问题讨论】:

【参考方案1】:

最持久的方法是将UICollectionViewLayout 子类化为第二个布局。但是,您可以在没有子类化的情况下执行此操作,尽管它可能看起来更复杂。

这个想法是复制绿色单元格的内容并将它们动画到集合视图上方的位置 - 而不是集合视图中的单元格。您将使用[collectionView layoutAttributesForItemAtIndexPath:selectedIndexPath].frame 获取动画起点的帧,并针对集合视图的内容偏移进行调整。当然,然后您必须使用 [collectionView deleteItemsAtIndexPaths:@[selectedIndexPath]] 从集合视图中删除绿色单元格。

同时,创建UICollectionViewFlowLayout 的另一个实例。此实例将 scrollDirection 设置为水平。在您的 UICollectionViewDelegateFlowLayout 方法中,将部分的插图设置为您要在其中显示单元格的区域 - 即,top 的值非常大。(您不必设置集合视图框架。)您然后会过渡到这个布局。

我想你会发现子类化UICollectionViewLayout 会更加直接和封装。例如,如果您想在另一个上下文中重新创建此演示文稿,则使用子类布局会更容易。

【讨论】:

以上是关于相同数据的不同视图之间的转换概念的主要内容,如果未能解决你的问题,请参考以下文章

不同活动的片段之间的共享元素转换

如何以编程方式布局在不同“模式”之间切换的应用程序?

PostgreSQL的几个概念

根视图控制器呈现的两个视图控制器之间的转换

数据类型转换

使用 AutoMapper 自动在多个数据模型间进行转换