viewWillTransitionToSize锁定方向

问题描述:

即使用户锁定了他的方向,是否有任何方法检测屏幕方向?我的应用程序使用自定义相机视图,我希望能够根据方向以横向或纵向保存图像。我目前使用下面的代码来检测方向,但是这只有在用户没有锁定它时才有效。viewWillTransitionToSize锁定方向

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 
     } 
    } 

如果这不是正确的方式来使用相机的方向,请指导我在正确的方向。

+0

你有你的自定义相机嵌入到您的视图控制器?如果是这样,我明白现在你只能在肖像模式下保存图像? – kamil3

+0

是的,我需要一次拍摄多张图片,并将所有图片一次全部保存到我的个人资料中。所以苹果的普通图像选择器并不适合我。一切正常,除了现在所有的图像都是肖像。是否有绝对没有办法获得横向的图像?这似乎有点奇怪 –

+0

这是一个黑客,但你可以利用加速度计和/或陀螺仪知道什么时候设备改变了方向 – Malik

我认为,要做到这一点的唯一方法是使纵向和横向模式项目: enter image description here

然后,覆盖不需要横向模式,所有的视图控制器这些属性。

override var shouldAutorotate: Bool { 
    return false 
} 

override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
    return .portrait 
} 

override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation { 
    return .portrait 
} 

与嵌入式摄像头视图控制器只需设置shouldAutorotate假和增加额外supportedInterfaceOrientations了在景观中。

请注意,如果您使用的UINavigationController或的UITabBarController它不会工作,那么你应该创建这些扩展:https://stackoverflow.com/a/39674618/5381663

+0

我想我们误解了对方。我可能解释错了。如果在拍摄照片后硬编码UIImageOrientation,我可以将图像保存为横向或纵向。但是,我想在拍摄照片时检测设备是处于横向模式还是纵向模式,因此我知道如何旋转图像。这是有效的,但是如果用户的方向锁定在他的设备上,那么它不起作用。 –