【问题标题】:UIViewController inside a root ViewController not rotating根 ViewController 内的 UIViewController 不旋转
【发布时间】:2012-01-19 11:29:08
【问题描述】:

我有一个 UIViewController,我想将它作为一个独立层添加到整个应用程序之上。所以我尝试在应用程序委托中使用 [self.window addSubview:viewController.view] 将它添加到 UIWindow。

但是,当用户旋转设备时,我的视图控制器中没有收到 willRotateToInterfaceOrientation 事件。所以我尝试按照here 的建议进行操作:我将我的视图控制器添加为应用程序委托中窗口的根视图控制器的子视图,但我的 willRotateToInterfaceOrientation 仍然没有被调用。

我该怎么办?

【问题讨论】:

    标签: ios uiviewcontroller rotation


    【解决方案1】:

    您的 rootViewController 充当容器视图控制器。

    在 iOS 5.0 及更高版本中,自定义 UIViewController 子类现在可以充当容器视图控制器。 UINavigationController 和 UITabBarController 类是 UIKit 提供的容器视图控制器的示例。容器视图控制器背后的想法是它管理来自其包含的视图控制器的内容的呈现,也称为其子视图控制器。子内容可以按原样呈现,也可以与容器视图控制器管理的其他自定义视图一起呈现。

    您正在做的是实现自己的视图层次结构,因此您负责沿着该层次结构向下传递 UILifecycle-Events。 iOS >= 5.0 支持您创建这样的容器视图控制器,提供

    - (void)addChildViewController:(UIViewController *)childController
    - (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers
    

    方法(以及更多)。对于 iOS

    【讨论】:

      【解决方案2】:

      在您的 rootViewController 中,您应该持有对 IndependentLayerController 的引用并转发 willRotateToInterfaceOrientation。

      您的 rootViewController 将收到消息,您可以在 IndependentLayerController 上调用 willRotateToInterfaceOrientation。

      【讨论】:

      • 没有办法让这一切自动发生吗?我想创建一个不依赖于父视图控制器的层,其中将隐式调用 willRotate
      • 据我了解,这是您的任务。没有在所有 UIViewController 上全局调用的事件。这随着 iOS 5 的变化而变化,看看我的下一个答案。
      猜你喜欢
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      • 2011-11-18
      • 2013-10-27
      • 2013-02-14
      • 1970-01-01
      • 2011-01-25
      • 1970-01-01
      相关资源
      最近更新 更多