实现复杂的自定义视图控制器的正确方法是什么

时间:2013-11-29 05:55:24

标签: ios uiview uiviewcontroller ios7

注意:我不是在谈论自定义视图控制器转换效果,可以通过使用自定义视图控制器来实现它是iOS 5+ API。

我正在谈论转换到另一个视图控制器,其中来自当前显示的视图控制器的视图被动画化到视图控制器以呈现视图。

示例

- 你有friendsViewController,它显示当前用户朋友的列表。每个表格视图单元格都有一张个人资料图片和名称。

- 点击一个单元格,所有其他单元格逐渐消失,名称和图片动画显示在顶部。此时,将显示UserProfileViewComtroller。

理论研究

- 我可以通过组合两个视图控制器轻松完成此操作,但可以从应用程序的其他部分启动UserProfileViewComtroller。

- 如果实例化UserProfileViewControllers视图,我可以使用UIViews方法转换坐标

我觉得这里有一个更合适/更清洁的解决方案,这就是为什么我要求社区寻求帮助:)。

2 个答案:

答案 0 :(得分:2)

在我看来,你想要的只是视图控制器转换,因为你想要做一些看起来像用户的'某事',好像你从旧的VC中获取了一个视图并移动了它到新的VC。

然后你很幸运,因为你允许UIView 从一个视图控制器移动到另一个视图控制器使用[superview addSubview:view]作为你希望转换的一部分做。

这可以在任何iOS版本上完成,虽然现在更容易,因为在iOS 7中有一个你编写的代理(参见<UIViewControllerAnimatedTransitioning> reference),它可以同时访问VC的视图层次结构,并且可以在过渡期间随意改变它们(移动一个视图,淡化其他视图)。

此外,在过渡期间使新视图控制器透明(或使用旧控制器的快照)将帮助您隐藏VC更改的事实。

答案 1 :(得分:0)

不是一个答案,而是一种可能激发解决方案的技术。我做了一个需要这样的自定义转换的应用程序。原来的应用程序安排自己然后拍了快照,所以在最后一刻,用户正在查看图像。第二个viewController是在给定坐标等的情况下创建的,然后是图像,然后立即显示。它将图像放入其视图中(具有相同边界的子视图)。

此时第二个vc具有完全控制权,并且可以淡入其他一些内容等。反向或多或少作为开始 - 使用,交换图像,使用移除图像来揭示真实视图内容。

请注意,这需要一些时间才能让它无故障地工作。

编辑:如果您担心将整个原始视图转换为图像,请修改该技术。例如,在原始视图中,将所有其他内容淡化为黑色但单元格,然后将一个单元格快照。第二个视图将以全黑背景开始,并将单元格图像放在顶部,然后从那里开始。

EDIT2:正如评论中所提到的,你当然会在没有动画的情况下推送第二个视图,因此它会立即发生。通过在第二个vc上设置一个小图像,并达成一致的背景,你可以快速“传递接力棒”,让第二个控制器快速无缝地工作。