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

Posted

技术标签:

【中文标题】如何在 Swift 中以编程方式更改设备方向?【英文标题】:How to change Device Orientation programmatically in Swift? 【发布时间】:2018-06-19 20:33:24 【问题描述】:

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

我已经尝试过,就像在另一个具有相同主题的问题中一样:

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

但这似乎只有在已经允许方向的情况下才有效,以便用户可以通过旋转设备来改变它,并且它还可以通过动画改变方向。但我希望我的应用程序在 VC1 中只有一个方向,在 VC2 中只有一个方向。用户不应该对方向有影响,也不应该有动画。这可能吗?

对不起,我的英语不好......

【问题讨论】:

【参考方案1】:

为每个 VC 声明这个变量 w/期望的方向。这是纵向的。

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)

【讨论】:

我很高兴,我到处都在使用它。 但是我还有一个问题。你如何设计 Storyboard 中的 ViewController?因为,我认为你只能有一个 ViewController 的方向...... 我不知道从情节提要中强制方向锁定的方法。但是你可以继承 VC,然后你在 storyboard 上创建的任何 VC 都只需要继承正确的方向锁。 非常感谢。我使用此代码成功修复了自定义相机的方向:D

以上是关于如何在 Swift 中以编程方式更改设备方向?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中以编程方式更改 UIButton 状态

如何在 swift Xcode 中以编程方式绑定/配对蓝牙 LE 设备?

如何在iOS 7中以编程方式设置设备方向?

如何在 iOS 6 中以编程方式获取设备的当前方向?

如何在 Swift 中以编程方式更改自定义 UITableViewCell 中按钮的背景颜色?

当 UIStepper 在 Swift 4 中以编程方式点击时如何更改 UILabel 的文本,如果它们都在 UITableViewCell 中?