对于仅支持iOS7的应用程序,我有一个UITableView(虽然如果有帮助的话,可以将它更改为UICollectionView),其中单元格如下所示:
+----------------------------------+=======+
| Label1 | sub- |
| Label2 Label3 | view |
+----------------------------------+=======+
我想转换到第二个视图,其中子视图缩小为更大,标签位置发生变化,更像是这样:
+----------+
| |
| subview |
| |
+----------+
Label1
Label2
Label3
这类似于iOS7日历应用程序,其中视图正在转换并在途中为部件设置动画。我知道我需要实现UIViewControllerAnimatedTransitioning
,但我在概念上遇到类似这样的事情会有问题。我是否隐藏了单元格的子视图,用新视图的子视图替换它们但是在同一个地方,然后设置动画?还是有一种不太复杂的方式?任何示例代码都会受到赞赏,因为我发现的所有示例都没有从一个视图到另一个视图的子视图。
ETA:我越想到这一点,我就越想知道:使用带有流布局的UICollectionView可以更好地处理它,并且只需将细节设置为动画调整大小到屏幕的完整大小?
答案 0 :(得分:11)
我认为iOS7日历动画是通过集合视图动画过渡布局来完成的,这对于这种情况来说很棒,但并不是你想要的。此外,它们似乎让您在同一个视图控制器中,这可能不适合您在上面描述的主细节场景。
我最近一直在玩动画过渡,并且发现iOS7中可用的新快照视图非常适合这类事情。
我是自动布局的忠实粉丝,但使用约束的过渡动画太复杂了。但是,您可以假设在转换开始时,您的视图已经布局,因此您可以应用以下原则:
由于布局已经发生,您可以在这些快照上使用现有视图的center
或frame
属性,并为这些属性设置动画。它使代码更容易阅读。这就是Augie上面评论的内容。
在您的情况下,您可以通过将所选单元格的各种视图绑定到传入控制器的视图,并将它们设置为新位置来获得您所获得的效果。
我已经通过此转换创建了一个示例项目on GitHub。最终效果如下:
这只是一个快速示例,展示了如何执行动画。在生产代码中,您可能会使参与控制器符合协议,在这些协议中,它们返回了许多视图以用于转换,而不是直接公开属性并将转换绑定到这些特定类。