用于锁定方向的 viewWillTransitionToSize
viewWillTransitionToSize for locked orientation
即使用户锁定了方向,有什么方法可以检测屏幕方向吗?我的应用程序使用自定义相机视图,我希望能够根据方向以横向或纵向保存图像。我目前正在使用以下代码来检测方向,但这仅在用户未锁定的情况下有效。
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
let orientation: UIDeviceOrientation = UIDevice.current.orientation
switch (orientation) {
case .portrait:
print("Portrait")
case .landscapeRight:
print("Left")
case .landscapeLeft:
print("Right")
default:break
}
}
如果这不是处理相机方向的正确方法,请指导我正确的方向。
我认为唯一的方法是在项目中启用纵向和横向模式:
然后,在不需要横向模式的所有视图控制器中覆盖这些属性。
override var shouldAutorotate: Bool {
return false
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .portrait
}
override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
return .portrait
}
在带有嵌入式摄像头的视图控制器中,只需设置 shouldAutorotate false 并添加额外的 supportedInterfaceOrientations 用于横向。
请注意,如果您使用 UINavigationController 或 UITabBarController,它将不起作用,因此您应该创建这些扩展:
即使用户锁定了方向,有什么方法可以检测屏幕方向吗?我的应用程序使用自定义相机视图,我希望能够根据方向以横向或纵向保存图像。我目前正在使用以下代码来检测方向,但这仅在用户未锁定的情况下有效。
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
let orientation: UIDeviceOrientation = UIDevice.current.orientation
switch (orientation) {
case .portrait:
print("Portrait")
case .landscapeRight:
print("Left")
case .landscapeLeft:
print("Right")
default:break
}
}
如果这不是处理相机方向的正确方法,请指导我正确的方向。
我认为唯一的方法是在项目中启用纵向和横向模式:
然后,在不需要横向模式的所有视图控制器中覆盖这些属性。
override var shouldAutorotate: Bool {
return false
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .portrait
}
override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
return .portrait
}
在带有嵌入式摄像头的视图控制器中,只需设置 shouldAutorotate false 并添加额外的 supportedInterfaceOrientations 用于横向。
请注意,如果您使用 UINavigationController 或 UITabBarController,它将不起作用,因此您应该创建这些扩展: