Ios 力方向改变并不总是有效的

Ios 力方向改变并不总是有效的,ios,swift,uiinterfaceorientation,Ios,Swift,Uiinterfaceorientation,我在开发iOS应用程序时遇到问题。我基本上是在创建一个游戏,需要用户在不同的时间以纵向方向使用系统,然后转移到横向。他们不能只是自动旋转,因为这会打乱游戏的特质。我找到了一种方法,通过设置适当的支持方向来强制执行我在任何给定时间需要的任何方向,以帮助将其锁定为特定的方向: override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { if self.currentGame == nil

我在开发iOS应用程序时遇到问题。我基本上是在创建一个游戏,需要用户在不同的时间以纵向方向使用系统,然后转移到横向。他们不能只是自动旋转,因为这会打乱游戏的特质。我找到了一种方法,通过设置适当的支持方向来强制执行我在任何给定时间需要的任何方向,以帮助将其锁定为特定的方向:

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
    if self.currentGame == nil {
        return UIInterfaceOrientationMask.Portrait
    }
    else {
        return self.orientations
    }
}
通常情况下,游戏锁定在横向,但我可以通过更改
self.orientations
变量来更改它,该变量是
UIInterfaceOrientationTask
。因此,在游戏中的某个地方,如果我需要切换到横向并将其锁定,我可以:

self.orientations = UIInterfaceOrientationMask.Landscape
然后通过在某个地方做一个动作来强制旋转:

self.supportedInterfaceOrientations()
UIDevice.currentDevice().setValue(UIInterfaceOrientation.LandscapeLeft.rawValue, forKey: "orientation")
虽然我做了一些alpha测试,并四处寻找bug,但这实际上工作得很好。所以,如果我在纵向,然后使用此方法强制旋转到横向,然后将其锁定在那里(反之亦然),效果很好。然而,如果出于某种原因,我将iPhone侧举,使其从技术上看不是纵向的(尽管它看起来是这样,因为它是被迫的),它将拒绝旋转

我知道这种强迫旋转的方法其实是一种技巧。我想知道是否有人知道解决这个问题的方法,或者他们是否知道一种更好的方法来强制设备旋转方向

非常感谢您的帮助。谢谢