ios 如何在只支持肖像模式的情况下检测iPhone方向

uubf1zoe  于 2023-06-25  发布在  iOS
关注(0)|答案(2)|浏览(129)

我希望一个应用程序保持相同的用户界面,不管设备的方向是什么。我不想在支持多个设备方向时使用默认行为,即每次方向更改时UI都会自动滑动/移动。但是,我还想检测方向是什么,以便执行一些自定义代码。

  • 当Info.plist中的supportedDeviceOrientations设置为only portrait时,似乎不会发送UIDevice.orientationDidChangeNotification。
  • 覆盖supportedInterfaceOrientations似乎没有做任何事情。

有没有一种方法可以在Info.plist中只允许一个设备方向的情况下获得设备方向的信息(它现在应该是横向的)?

piv4azn7

piv4azn71#

您需要做的是更新您的Info.plist以支持所有方向。
然后在根视图控制器中覆盖supportedInterfaceOrientations

override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    return .portrait
}

这将使您的视图控制器保持在纵向,而不管设备方向如何,但它也允许设备方向更改通知仍然在设备方向更改时发送。
这假设iPhone上未启用旋转锁定。如果用户锁定旋转,则应用根本无法获得设备方向更改通知。但这基本上就是旋转锁的重点。

czq61nw1

czq61nw12#

假设你在@hangarrash回答的地方,要检测iPhone的方向,你可以使用NotificationCenter和一些合并发布器。

import Combine
...
private let cancellables: Set<AnyCancellable> = []
...
NotificationCenter
            .default
            .publisher(for: UIDevice.orientationDidChangeNotification)
            .sink { [weak self] _ in
                
                let orientation = UIDevice.current.orientation
                switch orientation {
                case .unknown:
                    ...
                case .portrait:
                    ...
                case .portraitUpsideDown:
                    ...
                case .landscapeLeft:
                    ...
                case .landscapeRight:
                    ...
                case .faceUp:
                    ...
                case .faceDown:
                    ...
                @unknown default: break
                }
            }
            .store(in: &cancellables)

相关问题