只需像往常一样进行推送,但将其设置为不动画。
IE
[self.navigationController pushViewController:newViewController animated:NO];
那么当你想回去的时候...
[self.navigationController popViewControllerAnimated:NO];
然后你可以有两个导航栏,但它看起来是同一个栏,因为它没有动画。
编辑也可以在视图中设置动画并保留导航栏
我不确定应用程序的整个流程,但如果你想保留导航栏并滑动新 UI,那么你可以创建一个滚动视图(带分页)并将每个 VC 的视图放在不同的框架上滚动视图什么的。
你为什么要保持导航栏不动?为导航栏设置动画并在其上保留相同的按钮等没有任何问题。
话虽如此,如果您使用不同的 VC,那么导航栏无论如何都应该更改以显示您当前正在查看的 VC 的详细信息(即标题)。
另一种更激进的方法
好的,现在横向思考:D
怎么样,您使用非动画推送和弹出(如上),而不是仅显示 UI,您可以从相关方面对其进行动画处理。(然后您为 UI 子类化的单例或 VC 子类可以在所有视图控制器中为您执行此操作)。
下一个问题是,在新 UI 中进行动画处理之前,UI 看起来会立即变为空白,因此您需要对旧 UI 进行动画处理。这意味着两个 UI(旧的和新的)必须同时出现在屏幕上。
您可以通过将旧 UI 的整个视图转换为图像(不难找到链接)然后将该图像传递给新的 VC 来解决这个问题。然后,新的 VC 将立即显示此图像并在屏幕上将其动画化,同时将其自己的 UI 动画化到屏幕上。
真的没有听起来那么难做。特别是如果你继承 UIViewController 广告给它一个函数animateUI
和一个属性oldUIImage
和direction
. 然后你可以在这个类中重写 viewWillAppear 来为你做动画。然后你唯一需要做的就是在你推/弹出它时给每个 VC 一个图像和一个方向。
这只是给人一种你所追求的错觉,意味着你仍然可以保持一个相当简单的对象模型和应用程序的流程。
...或者其他的东西。