2

我对 CoreMotion 很陌生,但我正在尝试构建一个使用 CoreMotion 来查看用户是否在上下跳动的应用程序(想想跳绳)。它还需要让用户能够以他们想要的方式(横向、纵向、奇怪的倾斜方式等)握住他们的手机(没有 iWatch),并且仍然能够判断他们是否在上下移动。我想这有点像“扔手机”应用程序,但没有测量距离。

所以我使用 userAcceleration 和重力通过检查不同重力轴的值来查看哪个方向是“向下”的,它工作正常,但感觉像是一种笨拙的方式。

有没有更好的方法来做我正在做的事情?基本上,当前应用程序需要能够判断是否存在垂直于地面的加速度(无论您如何握住手机)。

import UIKit
import CoreMotion

class TestViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

      startJump()
    }



    func startJump() {

        if CMMotionManager.shared.isDeviceMotionAvailable {
            CMMotionManager.shared.deviceMotionUpdateInterval = 0.01

            CMMotionManager.shared.startDeviceMotionUpdates(to: OperationQueue.current!) { (data, error) in

                guard let myData = data else {
                    return
                }

                var gravX = abs(myData.gravity.x)
                var gravY = abs(myData.gravity.y)
                var gravZ = abs(myData.gravity.z)

                var userX = abs(myData.userAcceleration.x)
                var userY = abs(myData.userAcceleration.y)
                var userZ = abs(myData.userAcceleration.z)

                if gravZ > 0.9 && userZ > 1 {
                    print("Jump; Z is up")
                }
                if gravX > 0.9 && userX > 1 {
                    print("Jump; X is up ")
                }
                if gravY > 0.9 && userY > 1 {
                    print("Jump; Y is up")
                }
            }
        }
    }





    override func viewDidDisappear(_ animated: Bool) {
        CMMotionManager.shared.stopDeviceMotionUpdates()
    }
}
4

0 回答 0