如何将用户界面方向应用到 iOS 故事板场景

Posted

技术标签:

【中文标题】如何将用户界面方向应用到 iOS 故事板场景【英文标题】:How to apply an user interface orientation to an iOS storyboard scene 【发布时间】:2017-07-28 01:20:12 【问题描述】:

我正在开发一个 ios 应用程序,它允许某人玩两种不同游戏中的一种。

两场比赛都在一组回合中进行。当玩家完成一个回合时,应用程序会转换到显示结果的新场景,然后转换到另一个回合场景或结束游戏场景。

由于应用程序中场景的瞬态特性,像在更传统的应用程序中所做的那样持久化场景几乎没有意义,人们可以返回到之前的场景。

为此,大多数场景导航是通过使用 UINavigationViewController 并简单地调用 setViewControllers(animated:) 提供一个仅包含 UIViewController 的数组来完成的,这非常有效。

我提到该应用程序将允许某人玩两种游戏之一。事实证明,在 iPhone 上,一个游戏最好在纵向模式下玩,而另一个游戏最好在横向模式下玩。我希望能够控制特定UIViewController 在激活时使用的用户界面方向。

我已经尝试使用UINavigationControllersupportedInterfaceOrientations 属性和application(_ application: supportedInterfaceOrientationsFor window:)UIApplicationDelegate,并且已经能够使事情适用于标准应用程序。但是,当我尝试使用 setViewControllers(animated:) 将事物应用到我的游戏应用程序的工作方式时,似乎没有调用任何与应用所需用户界面方向相关的方法,并且所有场景都以相同的方向显示。

对于如何让应用程序中的场景以特定的用户界面方向显示,人们有什么建议?

【问题讨论】:

【参考方案1】:

尝试让你呈现的视图控制器调用下面的方法,它的视图会出现,或者视图确实出现了:

class func attemptRotationToDeviceOrientation()

一些视图控制器可能希望使用特定于应用程序的条件 确定支持哪些界面方向。如果你的看法 控制器会这样做,当这些条件发生变化时,您的应用程序应该 调用这个类方法。系统立即尝试旋转到 新方向。

https://developer.apple.com/documentation/uikit/uiviewcontroller/1621400-attemptrotationtodeviceorientati

【讨论】:

这很有趣。我添加了对 UIViewController 的调用。在每个视图控制器的 viewDidAppear 方法中尝试RotationToDeviceOrientation。事实证明,当这种情况发生时,每个视图控制器的 supportedInterfaceOrientations 属性都是可访问的。每个需要特殊方向的视图控制器都会返回所需的方向,但是似乎没有效果。视图仍然以相同的方向显示。 supportedInterfaceOrientations 属性只有在 UINavigationController 从仅使用 setViewControllers(,animated: true) 更改为使用空 UIViewController 数组调用 setViewControllers(,animated: true) 以清除所有内容然后调用时才能访问pushViewController(,动画:真)。这动画效果不太好,而且无论如何使用它并不能最终解决问题

以上是关于如何将用户界面方向应用到 iOS 故事板场景的主要内容,如果未能解决你的问题,请参考以下文章

如何在多个 UIViewController 之间共享一个故事板场景

Xcode:更改故事板场景中的视图类型

Objective-C UIScrollView 不滚动

IOS应用导航栏后退按钮

如何在 Storyboard 场景中为 UIButton 编写代码

WKWebView 添加到子视图,并将大小设置为等于父视图?