ios - 首次解锁手机时,如何使 UIDeviceOrientation 自动变为纵向?

标签 ios swift

我目前正在制作一款游戏,如果您先拿起手机,那么您就输了。因此,我有一个方向观察器来检查手机何时被拿起(纵向)。但是,每当我锁定手机然后解锁时,方向观察器会自动认为手机处于纵向模式,即使手机正面朝上。

我试过删除观察者并在解锁手机几秒钟后将其添加回来。

NotificationCenter.default.addObserver(forName: UIDevice.orientationDidChangeNotification, object: nil, queue: OperationQueue.main, using: { note in

            let orientation: UIDeviceOrientation = UIDevice.current.orientation
            if orientation == .faceUp {
                print("yeoo")

            } else if orientation == .portrait {
                print(1)
                if (self.gameMode == "game1") {

                    if (self.host == Auth.auth().currentUser?.uid) {
                        self.ref.child("games").child(String(self.randNum ?? 0)).child("hostPickUp").setValue("true")
                        let alert = UIAlertController(title: "Phone Picked Up", message: "You picked up your phone and must pay the penalty!", preferredStyle: UIAlertController.Style.alert)

                        alert.addAction(UIAlertAction(title: "Yes, I Pay", style: UIAlertAction.Style.default, handler: { _ in
                            self.ref.child("games").child(String(self.randNum ?? 0)).child("recent").setValue(Auth.auth().currentUser?.uid)
                            self.ref.child("games").child(String(self.randNum ?? 0)).child("players").child((Auth.auth().currentUser?.uid)!).child("pickedUpPhone").setValue("true")
                            self.ref.child("games").child(String(self.randNum ?? 0)).child("players").child((Auth.auth().currentUser?.uid)!).child("time").setValue(self.secs)
                        }))

                        alert.addAction(UIAlertAction(title: "Call it Even", style: UIAlertAction.Style.default, handler: { _ in
                            self.ref.child("games").child(String(self.randNum ?? 0)).child("callItEven").setValue("true")
                            self.ref.child("games").child(String(self.randNum ?? 0)).child("recent").setValue("calliteven")
                        }))

                        self.present(alert, animated: true, completion: nil)
                    } else {
                        self.ref.child("games").child(String(self.randNum ?? 0)).child("recent").setValue(Auth.auth().currentUser?.uid)
                        self.ref.child("games").child(String(self.randNum ?? 0)).child("players").child((Auth.auth().currentUser?.uid)!).child("pickedUpPhone").setValue("true")
                        self.ref.child("games").child(String(self.randNum ?? 0)).child("players").child((Auth.auth().currentUser?.uid)!).child("time").setValue(self.secs)
                    }

                } else if (self.gameMode == "game2"){

                    self.timer2.invalidate()
                    self.ref.child("games").child(String(self.randNum ?? 0)).child("players").child((Auth.auth().currentUser?.uid)!).child("pickedUpPhone").setValue("true")
                    self.ref.child("games").child(String(self.randNum ?? 0)).child("players").child((Auth.auth().currentUser?.uid)!).child("time").setValue(self.secs)
                    self.ref.child("games").child(String(self.randNum ?? 0)).child("finalTime").setValue(self.secs)
                    self.ref.child("games").child(String(self.randNum ?? 0)).child("recent").setValue(Auth.auth().currentUser?.uid)
                }
            }

最佳答案

问题是 UIDeviceOrientation 没有告诉您您需要知道的内容。您想要使用 Core Motion,它使用重力告诉您设备在空间中的方向。

关于ios - 首次解锁手机时,如何使 UIDeviceOrientation 自动变为纵向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56763444/

相关文章:

c++ - 我如何使用 boost::test 和 xcode 4 来测试一些 ios c++ 代码?

ios - 使用 swift 3 在后台打开 url?

arrays - 如何根据另一个数组元素属性快速排序数组

objective-c - objective-c 中的双向字典

categories - 从 Swift 访问自定义 Obj-C 类别

xcode - 数据模型更改时如何更新 NSCollectionViewItem?

ios - 部署旧版本的 iOS 应用程序

ios - 如何将 NSXMLParser 抽象为单独的类-Swift

iphone - MKMapKit 获取可见的注释 View

iphone - tableview 数据源中 cell.textLabel.text 行的实际含义是什么?