3

我正在开发适用于 iOS 5 的应用程序,并且我有一个需要以纵向视图推送的控制器。从风景中以纵向模式推动控制器非常棘手,但最后我想出了如何做到这一点。我通过presentModalViewController或通过pushViewController并在我覆盖preferredInterfaceOrientationForPresentationmetod的控制器内部显示控制器。

-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationPortrait;
}

它工作正常,只是它有一个问题。下面是场景。

  1. 用户以横向模式握住设备,当前控制器以横向模式正确显示
  2. 用户进行一些操作,出现仅纵向控制器(作为模态控制器和纵向模式)
  3. 用户关闭模态控制器
  4. 以前在横向工作的控制器现在是纵向的,但用户仍然以横向方式握住他的设备 ---> 这就是问题

我试图通过打电话来解决它,[UIViewController attemptRotationToDeviceOrientation]但它没有帮助。

感谢您提前提供任何帮助。

4

2 回答 2

1

我希望你能得到一个更好的、有效的解决方案我做了一件令人讨厌的事情来开始工作。我的问题是我需要支持从 4.3 到 6.0。一些 pushModal 功能发生了根本性的变化,被弃用等等,在轮换方面也有变化。

我写了一个 RoatatingViewController 并添加到了根目录。我根据需要添加了推送模式和 pushviewconcollers。当我需要弹出时,我会进行检查:如果堆栈上的所需组件处于所需的方向而不是好的方向,则没有变化。否则:弹出景观并推送肖像实例并将景观数据复制到肖像。

这不好,它的内存效率不高,但在所有 iOS 版本上都可以正常工作。祝你好运!

于 2013-04-02T11:38:44.713 回答
1

你说使用 IOS 5,但preferredInterfaceOrientationForPresentation()方法只能从 IOS 6开始。

要解决您的问题(在 ios5 中),您需要shouldAutorotateToInterfaceOrientation()像这样覆盖该方法...

在目标视图控制器(您在纵向模式下需要的视图控制器)中像这样......

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return UIInterfaceOrientationIsPortrait(interfaceOrientation);
}

更新:

在当前视图控制器(您在横向模式下需要的视图控制器) 中像这样......

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}
于 2013-04-02T11:45:26.710 回答