我试图达到以下效果:
AUICollectionView
为父类对象(例如相册)显示单元格网格。当我点击其中一项时,我想将该元素滚动到屏幕顶部并从中打开类似 Springboard 的文件夹。在该文件夹区域内,应显示另一个集合,包括详细项目,即该相册的单张照片。点击剩余的“父”视图会再次关闭文件夹。请参阅此架构:
到目前为止,我所做的是专辑的常规收藏视图。当我选择一个时,它会滚动到顶部的选定项目,然后用于JWFolders
在该位置打开一个空文件夹。一旦显示出来,我就会触发周围环境UINavigationController
来推动我的第二个视图控制器和细节项。那个是布局的,所以它在用户看来就好像它仍然是同一个视图。
这种方法有几个问题,我想知道如何更好地做到这一点:
JWFolders 截取屏幕截图并向上/向下动画两半以实现打开效果。这没问题,但在 iPad3 上相当慢,因为它移动了很多像素,而 iPad3 的 GPU 不能完全胜任这项任务。
第二个视图需要像素完美以匹配第一个视图。这很可能会意外中断。
对于视图控制器转换可以使用哪些动画,我受到限制。默认
UINavigationController
从右侧推送不合适。我覆盖它以进行交叉溶解,但仍然远非理想。
我想获得有关如何以可维护的方式解决此问题的指示,这种方式不需要对框架的设计目的进行太多创造性的黑客攻击。我可能在这里遗漏了一些明显的东西,因此感谢您提供示例或一般建议。
更新:
我稍微改变了方法。现在我使用一个包含两个嵌入式集合视图控制器的容器视图控制器。一个用于“相册”,一个用于底部的“照片”部分。UIImageView
在两者之间使用a ,我可以完成指向上方的三角形。从维护的角度来看,这也很好,因为这两个集合完全分开处理,使维护更容易。
该应用程序使用自动布局,因此我可以通过修改约束来更改两个嵌入视图中的每一个占用的空间量。这比使用 JWFolders 的基于屏幕截图的方法快得多,并且在 iPad3 上也能很好地工作。
这几乎可以让我到达我想去的地方。剩下的一件事是让开场动画正确。我想同时滚动相册集合,以便点击的项目转到顶部并展开照片集合,三角形指向相册单元格。
我可以通过布局约束以某种方式将下视图“连接”到该单元格,以便scrollToItemAtIndexPath:atScrollPosition:animated:
调用将下视图拖开吗?