在iOS中单击按钮将设备方向从纵向更改为横向

Posted

技术标签:

【中文标题】在iOS中单击按钮将设备方向从纵向更改为横向【英文标题】:Change the device orientation from portrait to landscape on a button click in iOS 【发布时间】:2021-04-15 12:05:03 【问题描述】:

我已经尝试在按钮单击事件上更改设备方向 2 天,但我无法正确实现。

所以,我有一个最低版本为 12.4 的 iPhone 应用,而我用来测试的设备是 14.4。我已经使用了这个项目here 中提到的代码(在使用 push 或 present 呈现新的视图控制器时可以正常工作)但是在同一个视图控制器上时同样不起作用。用户需要旋转他/她的设备来启动方向改变。

这是我在视图控制器中尝试在按钮单击事件上旋转的代码。

    let appDelegate = AppDelegate.sharedInstance
    let oldOrientaion = appDelegate.deviceOrientation
    appDelegate.deviceOrientation = oldOrientaion == .landscapeRight ? .portrait : .landscapeRight
    let value = appDelegate.deviceOrientation.rawValue
    UIDevice.current.setValue(value, forKey: "orientation")

有人可以帮我弄清楚这到底缺少什么吗?

另外,附带说明一下,视图控制器呈现在不同的视图控制器上,所以即使我尝试在项目中呈现新的视图控制器一段时间并改变那里的方向,它也不起作用。

编辑:

现在已修复。我试图使用UIInterfaceOrientationMask 而不是UIInterfaceOrientation 来设置方向。因此,将代码更改为最后使用 UIInterfaceOrientation 现在可以正常工作了。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

你所做的一切都是正确的,只需要调用attemptRotationToDeviceOrientation 方法来使更改生效。基于documentation:

一些视图控制器可能希望使用特定于应用程序的条件 确定支持哪些界面方向。如果你的看法 控制器会这样做,当这些条件发生变化时,您的应用程序应该 调用这个类方法。系统立即尝试旋转到 新方向。

在您的代码中,它将如下所示:

UIViewController.attemptRotationToDeviceOrientation()

【讨论】:

以上是关于在iOS中单击按钮将设备方向从纵向更改为横向的主要内容,如果未能解决你的问题,请参考以下文章

在Objective C中点击后退按钮时如何将界面方向从横向更改为纵向

主视图控制器在点击项目并快速将方向从纵向更改为横向后消失

当我从纵向模式更改为横向时,按钮背景图像消失

当视图从纵向更改为横向时,方向不会改变

如果设备是 iPad,如何将方向更改为横向

如何将视图从纵向模式更改为横向模式并锁定它?