我需要锁定除自动旋转以外的所有控制器。它必须旋转纵向和横向。我已阅读此topic并尝试了此解决方案
let value = UIInterfaceOrientation.LandscapeLeft.rawValue
UIDevice.currentDevice().setValue(value, forKey: "orientation")
但我没有运气,它没有用。也许这是因为我使用导航控制器,我在之前的链接中看到了一些提及但我不理解的方法,因为作者允许Xcode首选项中的方向模式,然后在代码中复制它们。
也许有人可以提供建议吗?
答案 0 :(得分:0)
处理轮换的当前方法是viewControllerWillTransitionToSize:withTransitionCoordinator:
。文档位于以下链接:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIContentContainer_Ref/index.html#//apple_ref/occ/intfm/UIContentContainer/viewWillTransitionToSize:withTransitionCoordinator:
它有点不同,因为你正在使用屏幕尺寸而不是方向。这是处理大小和过渡的新方法。可以把它想象成一个响应式布局而不是不同的旋转值。换句话说,你不再为“横向”设计,而是为了一个比它更高的屏幕。这是一个微妙但重要的区别。
您可以以不同的方式为不同的视图控制器实现此方法。如果您正在使用导航控制器并希望以不同方式影响子视图,那么首先我会说这种可能性很糟糕。但是如果你仍然想要这样做,你可以在导航控制器中处理旋转。
您不应该像这样设置设备方向。
答案 1 :(得分:0)
你可以尝试这种方法。将此方法粘贴到视图控制器上,使设备支持纵向和横向,但颠倒方向除外。
func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
return UIInterfaceOrientationMaskAllButUpsideDown
}
但正如克里斯所建议的那样,你应该使用viewControllerWillTransitionToSize
来处理那里的方向。