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

时间:2014-10-03 01:10:27

标签: ios ios8

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

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

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

我也遇到了这个问题,并从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
}

答案 2 :(得分:0)

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

- (BOOL)shouldAutorotate {
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskPortrait;
}

你的旋转视图控制器:

- (BOOL)shouldAutorotate {
    return YES;
}


- (NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskAll;
}

答案 3 :(得分:0)

您必须执行两个步骤:

1-您只需要在Info.plist文件中选择一个所需的方向。并且此选择将应用于您的启动屏幕。对于您的示例情况,它应该为UIInterfaceOrientationPortrait

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

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