在从UITableView到UIView的交互式转换中animation子视图

对于只有iOS7的应用程序,我有一个UITableView(虽然这将是学术的,将其更改为UICollectionView,如果这将帮助)的单元格看起来像这样:

+----------------------------------+=======+ | Label1 | sub- | | Label2 Label3 | view | +----------------------------------+=======+ 

我想转换到第二个视图,其中子视图缩小到更大,标签位置也改变了,更像这样:

  +----------+ | | | subview | | | +----------+ Label1 Label2 Label3 

这与iOS7日历应用程序类似,视图正在转换和animation的方式部分。 我知道我需要实现UIViewControllerAnimatedTransitioning ,但是我在概念上遇到了这样的问题。 我隐藏单元格的子视图,将它们replace为新视图的子视图,但在同一个地方,然后animation这些? 还是有一个不太复杂的方法? 任何示例代码将不胜感激,因为我发现所有的例子都没有从一个视图到另一个视图的子视图。

ETA:我想到的越多,我越想知道:用stream布局的UICollectionView可以更好地处理这个问题,并且只需将细胞的大小调整为屏幕的全尺寸即可?

iOS7的日历animation,我认为,收集视图animation过渡布局,这是美好的,但不是你想要的这种情况。 此外,他们似乎让你在同一个视图控制器,这可能不适合主细节的情况下,如上所述。

我最近一直在玩animation转换,并发现在iOS7中可用的新快照视图对于这类事情来说是非常好的。

我是自动布局的狂热粉丝,但是使用约束的过渡animation太复杂了。 但是,您可以假设在转换开始时,您的意见已经布置好了,所以您可以应用以下原则:

  • 将传入视图添加到您的视图层次结构
  • 在上面创build一个空白的canvas视图
  • 创build传出视图的快照并将其添加到canvas
  • 创build传入视图的快照并将其添加到canvas
  • 执行两者之间的animation
  • 删除canvas

由于布局已经发生,您可以在这些快照上使用现有视图的centerframe属性,并对其进行设置。 它使代码更容易阅读。 这就是Augie上面的评论。

在你的情况下,你可以通过将所选单元格的各种视图绑定到传入控制器的视图,并将它们animation到新的位置来获得所需的效果。

我已经在GitHub上提供了这个转换的示例项目。 最终效果如下所示:

示例视频

这只是一个简单的例子来展示如何执行animation。 在生产代码中,你可能会使参与控制器符合一个协议,在那里他们返回了一些用于转换的视图,而不是直接暴露这些属性,并将转换绑定到这些特定的类上。