如何判断iPhone是“面朝下”还是“面朝上”?

goo*_*ate 6 iphone ios xamarin

我需要检测 iPhone 面向的方向,以便在跌落时可以从无障碍摄像头(正面或背面)进行录制。

这将在紧急情况下使用,并且手机掉落或放置在活动摄像头无法记录任何有价值的内容的位置。

我可以使用什么 API 或技术来确定这一点?

dus*_*rwh 5

这是我编写的一个简单函数,用于开始跟踪方向变化,以便您可以知道它何时面朝下或面朝上(或您正在寻找的任何方向):

func trackOrientationChanges() {
    UIDevice.current.beginGeneratingDeviceOrientationNotifications()
    NotificationCenter.default.addObserver(forName: UIDevice.orientationDidChangeNotification, object: nil, queue: nil, using:  
    { notificiation in
        if UIDevice.current.orientation == .faceDown {
            print("Device is face down")
        } else {
            print("Device is not face down")
        }
    })
}
Run Code Online (Sandbox Code Playgroud)

用 Swift 4 编写,但 API 自 iOS 2.0+ 起可用

  • 仅当用户解锁屏幕纵向方向时,此功能才有效。对于 Swift4,使用 UIDevice.orientationDidChangeNotification 而不是 NSNotification.Name.UIDeviceOrientationDidChange 作为通知名称。 (2认同)

Jas*_*son 2

检查UIDevice类的 ProximityState 属性。这将告诉您屏幕是否靠近某个物体(用户的脸部或平坦的地面)。

对于较新的设备,您还可以使用CoreMotion。Z 轴上的正值应对应于手机屏幕朝下。