用于Springboard的UICollectionView文件夹

Dan*_*ler 35 xcode cocoa-touch ios ios6 uicollectionview

我试图达到以下效果:

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

在此输入图像描述

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

这种方法有几个问题,我想知道如何更好地做到这一点:

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

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

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

我想指出如何以可维护的方式处理这个问题,这不需要对框架的设计要做太多创造性的黑客攻击.我可能会遗漏一些明显的东西,所以我们非常感谢您对示例或一般建议的指示.

更新:

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

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

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

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

Ada*_*ach 1

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

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

当这一切都正常工作后,您就可以概括并开始执行一些操作,例如决定将点击的图标作为底部集合的一部分,如果图标位于屏幕下方,则文件夹会显示在上方。

(我犹豫是否回答这个问题,因为有大量的赞成票但没有答案,所以我可能错过了一些东西 - 但这就是我开始尝试实现跳板效应的方式。)