【问题标题】:How to make an app launch in correct landscape orientation without rotating 180° at launch?如何在不旋转 180° 的情况下以正确的横向方向启动应用程序?
【发布时间】:2014-05-07 02:46:08
【问题描述】:

我在使用纯横向应用时遇到了一个奇怪的问题。它可以很好地向左或向右横向旋转,但是当应用启动时它会旋转 180 度,而不是仅仅以正确的方向启动。

我尽我所能在 StackOverflow 和 Google 上找到。信息列表包含:

已测试:iOS 7.1 完全忽略了 plist 中的初始启动方向设置。我左右都试了,然后删除 info plist 中的密钥。没有效果。应用程序总是以横向启动,左侧有主页按钮,忽略此设置。

重试时,我会删除应用并清理构建。

在 App Delegate 中,我有这个:

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

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight;
}

- (BOOL)shouldAutorotate {
    return YES;
}

在根视图控制器中:

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

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight;
}

- (BOOL)shouldAutorotate {
    return YES;
}

一些横向应用(例如 Tiny Wings)以正确的方向启动,因此我知道我的项目有问题。让这项工作发挥作用的秘诀是什么?

【问题讨论】:

    标签: ios ios7


    【解决方案1】:

    首先,您不需要 AppDelegate 中的三个方法,因为它们是为控制器设计的,无论如何都不会被调用。

    您可以实现application:supportedInterfaceOrientationsForWindow: (iOS 6+),尽管它表示您的Info.plist 中的正确键不需要它:

    讨论

    此方法返回支持的界面方向的总集 通过应用程序。确定是否旋转特定视图时 控制器,此方法返回的方向相交 根视图控制器或最顶层支持的方向 呈现视图控制器。应用程序和视图控制器必须一致 在允许旋转之前。

    如果您不实现此方法,应用程序将使用 应用程序 Info.plist 的 UIInterfaceOrientation 键作为默认值 界面方向。

    但如果您的问题是在 iOS 6+ 上,我会尝试一下,因为它可能是 Apple 的错误。

    您也可以在控制器方法中返回所有方向以保持简单。


    总之:

    • AppDelegate 中删除您发布的方法,它们将不会被调用。
    • 返回控制器中的所有方向。
    • 然后使用您的 Info.plist(任何 iOS 版本)控制您的首选方向。

    可选,如果问题仍然存在:

    • 尝试在您的 AppDelegate 中实现 application:supportedInterfaceOrientationsForWindow:(仅限 iOS 6+),这通常不需要。

    【讨论】:

    • 这个方法属于AppDelegate、Window、RootViewController还是全部?
    • 喜欢这个? - (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { return UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight; }
    • 问题也是iOS 7。无处不在。我还有一个自定义 UIWindow 子类。
    • 自定义 UIWindow 类应该不是问题。
    【解决方案2】:

    iOS 总是以相同的界面方向启动应用程序(我相信应用程序声明的第一个方向),然后在启动后旋转。这是预期的行为,因为它简化了开发的某些方面。

    但是,我相信这个问题的答案就是您正在寻找的解决方案: iOS: Initial interface orientation[UIInterfaceOrientation] being ignored in plist

    【讨论】:

      【解决方案3】:

      到目前为止,我收到了您的问题,这可能会对您有所帮助。在一般设置中,您可以简单地在设备方向中勾选横向(右/左)模式。

      无需更改 plist 或任何东西。这对我有帮助,因为我创建了一个横向模式的游戏,所以它只在横向模式下打开,没有旋转效果。

      【讨论】:

      • 嗯,这正是我所做的,但它不起作用。应用程序始终以相同的横向启动,如果错误,则旋转 180 度。
      • 我又试了一次...看到我勾选了横向,然后以横向左侧模式(模拟器)打开应用程序,然后转来转去,但仍然没有旋转。看看你是否在左右两边都打勾,那么只有旋转效果才会出现。好吗?¿
      【解决方案4】:

      您需要更改Supported interface orientationsSupported interface orientations (iPad) 的值顺序。所以,Landscape (right home button) 应该排在第一位,Landscape (left home button) 应该排在这些列表的第二位。

      此外,您可以安全地从 .plist 中删除 Initial interface orientation。以及AppDelegateRootViewController中与界面方向处理相关的这三种方法。

      【讨论】:

      • 很遗憾,更改顺序没有任何效果。
      猜你喜欢
      • 2011-05-25
      • 1970-01-01
      • 1970-01-01
      • 2014-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多