【问题标题】:viewWillTransitionToSize for locked orientationviewWillTransitionToSize 用于锁定方向
【发布时间】:2017-12-24 08:47:15
【问题描述】:

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

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

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

【问题讨论】:

  • 您的视图控制器中是否嵌入了自定义相机?如果是这样,我知道您现在只能以纵向模式保存图像?
  • 是的,我需要,我需要能够一次拍摄多张图像并将所有图像一次保存到我的个人资料中。所以苹果的普通图像选择器对我不起作用。一切正常,除了现在所有图像都是纵向的。绝对没有办法获得横向图像吗?这似乎有点奇怪
  • 这是一个 hack,但您可以利用加速度计和/或陀螺仪来了解设备何时改变了它的方向
  • @Malik,我该怎么做?
  • 您必须对两者都进行一些阅读。这是一个解释它的基础知识的链接nshipster.com/cmdevicemotion

标签: ios swift3 uideviceorientation


【解决方案1】:

我认为唯一的方法是在项目中同时启用纵向和横向模式:

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

override var shouldAutorotate: Bool {
    return false
}

override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    return .portrait
}

override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
    return .portrait
}

在带有嵌入式摄像头的视图控制器中,只需将 shouldAutorotate 设置为 false 并添加用于横向的额外 supportedInterfaceOrientations

请注意,如果您使用 UINavigationController 或 UITabBarController 它将不起作用,因此您应该创建这些扩展:https://stackoverflow.com/a/39674618/5381663

【讨论】:

  • 我认为我们误解了对方。我可能解释错了。如果在拍摄照片后对 UIImageOrientation 进行硬编码,我可以将图像保存为横向或纵向。但是,我想在拍照时检测设备是处于横向还是纵向模式,所以我知道如何旋转图像。这可行,但如果用户在他的设备上锁定了他的方向,那么它就没有效果。
猜你喜欢
  • 1970-01-01
  • 2015-05-03
  • 1970-01-01
  • 1970-01-01
  • 2019-08-29
  • 1970-01-01
  • 2023-03-09
  • 2012-12-19
  • 2011-09-29
相关资源
最近更新 更多