【问题标题】:UiViewController rotation questionUiViewController 旋转问题
【发布时间】:2010-12-23 16:47:31
【问题描述】:

我的应用程序中的主菜单仅支持横向模式。 我通过设置UIRootViewController::shouldAutorotateToInterfaceOrientation:... 来实现横向限制 我还有另一个支持纵向模式的场景。 所以当我以纵向模式从另一个场景传递到主菜单时出现问题:应用程序不会自动旋转到横向,我找不到手动旋转它的代码方法。

有解决办法吗?将不胜感激。

编辑:对不起,我忘了添加细节。 RootViewController 常见于菜单和另一个场景。更重要的是 - 这些场景在一个共同的视图中(我的应用程序使用 OpenGL) 因此,在我从纵向场景进入菜单之前,我将 UIRootViewController::shouldAutorotateToInterfaceOrientation: 设置为仅针对横向返回 YES。

【问题讨论】:

    标签: iphone uiviewcontroller rotation landscape portrait


    【解决方案1】:

    如果您的其他支持纵向的场景由另一个 UIViewController 控制,那么您可以使用该视图控制器的 -shouldAutorotateToInterfaceOrientation: 来定义其行为。在许多情况下,仅此一项就足够了。当然,如果你需要为某些视图控制器做一些花哨的旋转而不是为其他的,那么事情就变得有点棘手了。

    【讨论】:

    • 我停止了这个解决方案:杀死我现有的 RootViewController 并创建一个具有另一个旋转限制的新的。似乎视图控制器并非旨在在运行时更改自动旋转设置。
    • 您能否保留仅横向的根视图控制器并将另一个视图控制器推送到导航控制器堆栈以显示另一个场景(支持两个/所有方向)?
    • 两个场景(主菜单和另一个场景)都在一个公共视图中(OpenGL)。我没有尝试,但我认为由两个控制器控制一个视图是个坏主意。如果您有这种情况的经验,请分享。这会很有趣。
    • 我没有意识到是这样的。我的应用程序没有大量使用 OpenGL - 只是一个更大的核心图形视图中的一个视图。但是,我建议考虑以下事项: UIDeviceOrientationDidChangeNotification 的 addObserver 和 -shouldAutorotateToInterfaceOrientation: 始终返回 YES。然后使用变换自己管理旋转。您将需要旋转视图以使其以横向显示。这就是我会尝试的,现在我更好地理解了这些限制。但这不是我做过的事情。
    【解决方案2】:

    除了 [UIDevice setOrientation:] 之外,没有简单的方法可以做到这一点,它不对开发人员开放,并导致应用程序被 Apple 拒绝。

    【讨论】:

      【解决方案3】:

      您可以对图层应用旋转,这将产生完全相同的效果。

      myview.layer.transform = CATransform3DMakeRotation(M_PI/2, 0.0f, 0.0f, 1.0f);
      

      【讨论】:

        猜你喜欢
        • 2011-04-10
        • 1970-01-01
        • 2011-11-18
        • 1970-01-01
        • 2012-03-27
        • 2010-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多