CoreMotion - Распознавание прыжка (Swift) - PullRequest
1 голос
/ 18 марта 2019

Я довольно новичок в 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()
    }
}
...