iOS Swift 5手动改变设备方向



在iOS swift 5项目中,我需要在一个场景中支持多个设备方向。

我有以下要求:

  • 如果设备是旋转的,设备的方向不应该改变。
  • 如果按钮被轻按,设备方向需要改变(左)旋转)

这意味着只有一个UIViewController用户应该能够通过点击按钮手动改变设备方向,但旋转设备不应该做任何事情。

实现此目的的一个简单方法是在AppDelegate上设置您支持的方向(_:supportedInterfaceOrientationsFor:)

创建一个本地变量

var orientation: UIInterfaceOrientationMask = .portrait

然后返回该变量作为支持的方向

func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
return orientation
}

上的ViewController,你想要旋转一个按钮,你可以改变应用程序委托上支持的方向,然后强制设备方向改变,使视图旋转

private func changeSupportedOrientation() {
let delegate = UIApplication.shared.delegate as! AppDelegate
switch delegate.orientation {
case .portrait:
delegate.orientation = .landscapeLeft
default:
delegate.orientation = .portrait
}
}
@IBAction func rotateButtonTapped(_ sender: UIButton) {
changeSupportedOrientation()
switch UIDevice.current.orientation {
case .landscapeLeft:
UIDevice.current.setValue(UIDeviceOrientation.portrait.rawValue, forKey: "orientation")
default:
UIDevice.current.setValue(UIDeviceOrientation.landscapeLeft.rawValue, forKey: "orientation")
}
}

将强制改变设备的方向,然后旋转视图。如果您再次点击按钮,方向将回到.portrait

请小心使用这个,因为你需要真正考虑你的导航堆栈,以确保只有导航堆栈的顶部支持旋转,并且只有在方向被设置回原来的.portrait之后才能从导航堆栈弹出。

相关内容

  • 没有找到相关文章

最新更新