在不可见的视图控制器上强制旋转的最佳方法是什么?

时间:2014-08-28 14:56:41

标签: ios objective-c uiviewcontroller rotation screen-rotation

我查看了Stack Overflow并没有找到解决我确切问题的任何内容。我正在开发一个使用自定义标签视图在4个不同导航控制器之间切换的应用。我面临的问题是,当旋转设备然后切换到另一个选项卡时,变为可见的视图控制器仍然是旧方向的布局。我一直在使用willRotateToInterfaceOrientation:duration:使用新方向执行我想要的任何方向特定的准备工作,当VC可见时,它按预期工作,但我知道旋转方法不会被调用视图控制器在轮换时不可见。

Apple的文档说:

  

隐藏视图控制器时可能会出现旋转

     

如果在发生旋转时视图控制器的内容不在屏幕上,则它不会看到旋转消息列表。例如,请考虑以下事件序列:

     
      
  1. 您的视图控制器全屏显示另一个视图控制器的内容。
  2.   
  3. 用户旋转设备,以便更改用户界面方向。
  4.   
  5. 您的应用程序会解除显示的视图控制器。
  6.         

    在此示例中,当旋转发生时,呈现视图控制器不可见,因此它不会接收任何旋转事件。相反,当它再次出现时,其视图只需调整大小并使用普通视图布局过程定位。如果您的布局代码需要知道设备的当前方向,它可以读取应用程序对象的statusBarOrientation属性以确定当前方向。

我想出了一些处理这个问题的想法,但我不确定什么是最好的。他们各有利弊。我目前的解决方案基本上是复制我在willRotateToInterfaceOrientation:duration: viewWillAppear中正在进行的操作,以便在旋转发生时看不到的视图控制器可以在新方向变为可见之前进行调整。我的另一个想法是将我的方向代码从willRotateToInterfaceOrientation:duration:移动到viewWillLayoutSubviews,当视图控制器在可见时旋转时以及在未显示之后变为可见时,它都被调用。麻烦的是,即使没有发生旋转,也可以非常频繁地调用布局方法。另一种选择是注册我UIDeviceOrientationDidChangeNotification的视图控制器,我想我的VC会收到它们,无论它们是否可见,但我还没有测试过。

我想这是一个非常普遍的问题,我想知道 - 其他人的解决方案是什么?有没有比我提出的解决方案更好的方法来解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

是在UIDeviceOrientationDidChangeNotification上添加一个观察者可以帮助你实现它