0

假设,我在处于横向模式的视图控制器中。当我推送新的视图控制器时,如何检查以前的视图控制器方向并更改此视图的方向?

请帮忙。

谢谢你。

4

2 回答 2

4

它必须以自动化的方式完成。在每个视图控制器中,您必须定义此方法:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

您可以在其中设置控制器的方向。

在 iOS 5 或更早版本UIViewController中,默认情况下仅处理纵向。
要处理其他可能的方向,您必须在视图控制器中实现此方法:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{

    return YES;
}

您可能还想定义处理旋转的方法:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration

或者

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

或者以自动化的方式进行。

你可以在这里阅读更多

处理视图旋转

在 iOS 6 中,您的应用支持在应用的 Info.plist 文件中定义的界面方向。视图控制器可以覆盖supportedInterfaceOrientations 方法来限制支持的方向列表。一般情况下,系统只会在窗口的根视图控制器或呈现为填满整个屏幕的视图控制器上调用该方法;子视图控制器使用其父视图控制器为它们提供的窗口部分,并且不再直接参与有关支持哪些旋转的决策。应用程序的方向掩码和视图控制器的方向掩码的交集用于确定视图控制器可以旋转到哪些方向。

你可以覆盖一个视图控制器的 preferredInterfaceOrientationForPresentation,该视图控制器旨在以特定方向全屏显示。

在 iOS 5 和更早版本中,UIViewController 类仅以纵向模式显示视图。要支持其他方向,您必须重写 shouldAutorotateToInterfaceOrientation: 方法并为您的子类支持的任何方向返回 YES。如果您的视图的自动调整大小属性配置正确,那么您可能只需要这样做。但是,UIViewController 类为您提供了额外的钩子来根据需要实现额外的行为。通常,如果您的视图控制器打算用作子视图控制器,它应该支持所有界面方向。

当可见视图控制器发生旋转时,将在旋转期间调用 willRotateToInterfaceOrientation:duration:、willAnimateRotationToInterfaceOrientation:duration: 和 didRotateFromInterfaceOrientation: 方法。viewWillLayoutSubviews 方法也会在视图被其父级调整大小和定位后调用。如果在方向更改发生时视图控制器不可见,则永远不会调用旋转方法。但是,viewWillLayoutSubviews 方法在视图变得可见时被调用。您对此方法的实现可以调用 statusBarOrientation 方法来确定设备方向。

注意:在启动时,应用程序应始终将其界面设置为纵向。在 application:didFinishLaunchingWithOptions: 方法返回后,应用程序使用上述视图控制器旋转机制在显示窗口之前将视图旋转到适当的方向。

于 2013-02-07T10:07:51.507 回答
0

根据您的问题,您能否更详细地解释您的要求以及为什么要这样做不是很清楚。

根据我的理解,您可以在新视图控制器中检查设备的当前方向,这将是前一个视图中设备的先前方向。

问候拉胡尔·杜贝

于 2013-02-07T10:12:15.630 回答