用于Springboard的UICollectionView文件夹

时间:2013-02-15 09:16:21

标签: ios xcode cocoa-touch ios6 uicollectionview

我试图达到以下效果:

UICollectionView显示父类型对象的单元格网格,例如: G。相册。当我点击其中一个项目时,我想将该元素滚动到屏幕顶部并从中打开一个类似Springboard的文件夹。在该文件夹区域内,应显示另一个集合,包括详细项目,i。即该专辑的个人照片。点击剩余的“父”视图会再次关闭该文件夹。请参阅此架构:

enter image description here

到目前为止,我所做的是专辑的常规收藏视图。当我选择一个时,它会滚动到所选项目到顶部,然后使用JWFolders在该位置打开一个空文件夹。一旦显示,我触发周围的UINavigationController以推送我的第二个视图控制器的详细项目。那个是布局的,所以用户看起来好像它仍然是相同的视图。

这种方法存在一些问题,我想知道如何做得更好:

  1. JWFolders截取屏幕截图并向上/向下动画两半以实现打开效果。这没关系,但在iPad3上相当慢,因为它移动了很多像素而且iPad3的GPU不能胜任这项任务。

  2. 第二个视图需要像素完美才能匹配第一个视图。这很可能会意外中断。

  3. 我对视图控制器转换可能的动画有限。从右侧推出的默认UINavigationController不合适。我重写它来做一个交叉溶解,但它仍然远非理想。

  4. 我想知道如何以可维护的方式解决这个问题,而不需要对框架设计的内容进行太多创造性的黑客攻击。我可能会遗漏一些明显的东西,所以我们非常感谢您对示例或一般建议的指示。

    更新

    我改变了一点方法。现在我使用一个容器视图控制器,它有两个嵌入式集合视图控制器。一个用于“专辑”,一个用于“照片”部分在底部。在两者之间的中间使用UIImageView,我可以将三角形指向上方。从维护的角度来看,这也很好,因为它可以使两个集合完全分开处理,从而使维护更容易。

    该应用程序使用自动布局,因此我可以通过修改约束来更改两个嵌入视图中的每个视图所占用的空间量。这比使用JWFolders的基于屏幕截图的方法更快,并且在iPad3上也能很好地工作。

    这个几乎让我成为我想去的地方。剩下的一件事就是让开场动画正确。我想同时滚动相册集合,以便点击的项目到达顶部并展开照片集合,三角形指向相册单元格。

    我是否可以通过布局约束以某种方式将下部视图“连接”到该单元格,以便scrollToItemAtIndexPath:atScrollPosition:animated:调用拖动下部视图打开?

2 个答案:

答案 0 :(得分:1)

为了解决这个问题,我会丢失这个库并导致iOS在没有屏幕截图或其他技巧的情况下移动这些显示元素。在水龙头上,当您将所有其他图案调暗时,使点按的图标保持其正常外观。从点击图标所在行的顶部到末尾查找集合视图的内容。创建两个新的集合视图 - 一个包含上半部分,包括您的点击图标,另一个包含其余部分。动画这些视图以为文件夹视图腾出空间。

文件夹视图是另一个出现在创建的间隙中的UICollectionView。 在主视图中,根据抽屉是打开还是关闭,呈现一个或三个视图。我可能会看一下创建一个带有集合视图的视图控制器,并使用视图控制器包含来管理所有三个视图。您可以完全控制这些视图的显示方式,因此您可以同时上下调整顶视图和底视图,以便像Springboard一样显示文件夹视图。

当这一切都正常工作时,你可以概括并开始做一些事情,比如如果屏幕上的图标很低,决定使用上面文件夹出现的底部集合的点击图标部分。

(我因为大量的赞成而没有答案而犹豫不决,所以我可能错过了一些东西 - 但这就是我开始尝试实现Springboard效果的方法。)

答案 1 :(得分:0)

要以相对简单的方式解决此问题,您可以尝试将文件夹设置为简单的UICollectionView子类,然后在点击相册单元格时插入该单元格。 在集合视图数据源中,您必须为文件夹单元格返回不同的大小等。 在该文件夹中,您必须创建文件夹集合视图,避免使文件夹​​单元格成为单元文件夹集合视图的数据源。