如何在Swift中编程更改设备方向?

6

在我的应用程序中,我想更改设备的方向。

我尝试使用与同一主题的其他问题相同的方式:

let value = UIInterfaceOrientation.landscapeRight.rawValue
UIDevice.current.setValue(value, forKey: "orientation")

但是,这似乎只有在方向已经被允许的情况下才起作用,以便用户可以通过旋转设备来更改方向,并且它也会带有动画更改方向。但我希望我的应用程序在VC1中仅具有一种方向,在VC2中也只有一种方向。用户不应该对方向产生影响,也不应该有动画效果。这可行吗?抱歉我的英语不好....
1个回答

12

为每个VC声明此变量,并使用所需的方向。这是用于纵向。

override var supportedInterfaceOrientations: UIInterfaceOrientationMask { return .portrait }   

然后在外观上强制执行所需的方向。

override func viewDidAppear(_ animated: Bool) {
  super.viewDidAppear(animated)
  UIView.setAnimationsEnabled(false)
  UIDevice.current.setValue(UIInterfaceOrientation.portrait.rawValue, forKey: "orientation")
  UIView.setAnimationsEnabled(true)
}

我很高兴,我在任何地方都可以使用它。 - jnblanchard
但是我还有一个问题。在Storyboard中,你如何设计ViewController呢?因为我认为你只能拥有一个ViewController的方向... - Quintus
我不知道从故事板中强制执行方向锁定的方法。但是你可以子类化VC,然后无论你在故事板上创建什么样的VC,它都必须继承正确的方向锁定。 - jnblanchard
非常感谢。我使用这段代码成功地修复了我的自定义相机的方向:D - Andres Paladines

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接