我有一个iOS8应用程序,我需要在玩游戏时支持所有方向,但在菜单中,只是肖像。我希望应用程序仅使用纵向图像启动,因此它与纵向菜单匹配。我遇到的问题是我必须在Info.pList文件中设置'UISupportedInterfaceOrientations'以支持所有方向,因为我需要它们全部用于主游戏。这显然会导致我的应用程序在横向模式下启动,如果设备是侧面的,我不想要。我试图将info.pList文件中的值设置为仅限肖像,但这会导致横向模式完全停止工作。
有没有办法允许info.pList文件中的所有方向,但强制启动图像只有纵向?或者允许我的代码中的所有方向,但在info.pList文件中仅指定纵向值?
您应该使用iOS 8的“启动屏幕文件”(xCode 6+中提供)。然后根据需要对启动文件应用约束(您可以根据需要在故事构建器中允许启动xib的方向)。即使您希望它用于以前的版本,也可以创建一个单独的初始屏幕并在故事构建器中设置其方向属性。
我也遇到了这个问题,并从Apple本身找到了一个很好的解决方案:
它表示要在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
}