强制支持所有方向的应用程序的启动方向

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了强制支持所有方向的应用程序的启动方向相关的知识,希望对你有一定的参考价值。

我有一个ios8应用程序,我需要在玩游戏时支持所有方向,但在菜单中,只是肖像。我希望应用程序仅使用纵向图像启动,因此它与纵向菜单匹配。我遇到的问题是我必须在Info.pList文件中设置'UISupportedInterfaceOrientations'以支持所有方向,因为我需要它们全部用于主游戏。这显然会导致我的应用程序在横向模式下启动,如果设备是侧面的,我不想要。我试图将info.pList文件中的值设置为仅限肖像,但这会导致横向模式完全停止工作。

有没有办法允许info.pList文件中的所有方向,但强制启动图像只有纵向?或者允许我的代码中的所有方向,但在info.pList文件中仅指定纵向值?

答案

您应该使用iOS 8的“启动屏幕文件”(xCode 6+中提供)。然后根据需要对启动文件应用约束(您可以根据需要在故事构建器中允许启动xib的方向)。即使您希望它用于以前的版本,也可以创建一个单独的初始屏幕并在故事构建器中设置其方向属性。

另一答案

我也遇到了这个问题,并从Apple本身找到了一个很好的解决方案:

https://developer.apple.com/library/ios/technotes/tn2244/_index.html#//apple_ref/doc/uid/DTS40009012-CH1-ALLOWING_YOUR_APP_TO_ROTATE_INTO_PORTRAIT_ORIENTATION_AFTER_LAUNCH

它表示要在info.plist中检查所需的启动方向,然后在appdelegate中实现此委托方法以在启动后覆盖支持的方向:

func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask {
    return .AllButUpsideDown
}
另一答案

您可以使用以下命令定义父视图控制器:

- (BOOL)shouldAutorotate {
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskPortrait;
}

和你的旋转视图控制器:

- (BOOL)shouldAutorotate {
    return YES;
}


- (NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskAll;
}
另一答案

您必须遵循以下两个步骤:

1-您需要在Info.plist文件中仅选择一个所需的方向。此选择将应用于您的启动屏幕。对于你的例子,这应该是UIInterfaceOrientationPortrait

2-你必须在你的func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask中实现AppDelegate。对于您的示例案例实现应该是

func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
    return .all    
 }

以上是关于强制支持所有方向的应用程序的启动方向的主要内容,如果未能解决你的问题,请参考以下文章

在一个模式视图控制器上强制 iOS 方向为横向

在 ios6 下横向启动应用程序同时支持所有方向

在方向更改时保留列表片段中的列表

支持 iPhone 6 和 iPhone 6+,针对 iPad 纵向和横向方向具有不同的启动/启动屏幕图像

支持iPhone 6和iPhone 6+,具有不同的启动/启动屏幕图像,适用于iPad纵向和横向方向

在 iOS 9 中强制视图控制器方向