iOS9:替代 UIDevice.currentDevice().setValue(...) 强制方向

Posted

技术标签:

【中文标题】iOS9:替代 UIDevice.currentDevice().setValue(...) 强制方向【英文标题】:iOS9: Alternative to UIDevice.currentDevice().setValue(...) to force orientation 【发布时间】:2015-09-20 22:22:55 【问题描述】:

在我看来,这在 ios9 中不再起作用了。这是基于我的 SO 研究强制改变方向的事实上的方式。它现在冻结了我的 SpriteKit 游戏。

只有我一个人吗,如果没有,有人知道替代方案吗?

编辑:Portrait 和 UpsideDown 仍然有效。现在似乎只有横向模式会导致冻结

编辑 2: 实际上我认为你可以使用 Portrait UpsideDown 和 LandscapeLeft LandscapeRight,但不能在它们之间

【问题讨论】:

不只是你。在 iOS 9 上,强制方向也不再适用于我。在某些情况下,我习惯于在纵向时强制方向为横向。 只需要在xcode中设置... iOS9.1,也不行 【参考方案1】:

补充亚历克斯的回答:我的经验是,Apple 只阻止不需要全屏的 iOS9 iPad 的方向更改。因此,如果您告诉应用程序需要全屏,旋转应该可以工作:

但是,我不知道它是否会解决您的 SpriteKit 冻结问题,因为根据我的经验,iOS9 也引入了很多 SpriteKit 错误。

【讨论】:

遗憾的是,您必须勾选此复选框(在 iOS 9 中禁用滑动和分屏)才能强制视图进入特定方向。理想情况下,我希望能够同时做到这两点,但目前强制方向比滑动/分屏更重要,除非你知道两者兼有的方法? 今天的英雄。谢谢!它为我节省了一些时间。【参考方案2】:

你是对的。在 iOS 9 上无法设置设备方向。我认为这是因为 iPad 上新的分屏模式。现在屏幕上可以同时有 2 个应用程序,一个应用程序决定允许哪个方向是“不公平的”。想象一下两个强制不同方向的应用程序,会发生什么?我认为 Apple 只是一般禁止它,即使他们可能会限制 iPad 非全屏应用程序

【讨论】:

为什么它仍然在 iPad 上的 iOS 10 中运行? iPad ios 10 依然有同样的功能 SplitScreen Mode【参考方案3】:

如果你有两个或多个 ViewControllers,并且你希望每个 ViewControllers 有不同的方向,我认为强制 VC 方向的最好方法是使用下面的这些代码:

let value = UIInterfaceOrientation.LandscapeLeft.rawValue
// let value = UIInterfaceOrientation.Portrait.rawValue
UIDevice.currentDevice().setValue(value, forKey: "orientation")

它适用于 iOS 9。

【讨论】:

以上是关于iOS9:替代 UIDevice.currentDevice().setValue(...) 强制方向的主要内容,如果未能解决你的问题,请参考以下文章

Appium超详细环境搭建for Mac

NSURLSession与NSURLConnection区别

iOS9适配

SKAudioNode 播放声音一次

iOS9适配

iOS9新特性