Как бы я использовал гироскоп в Swift 4, чтобы получить Yaw? - PullRequest
0 голосов
/ 19 марта 2019

Я посмотрел этот пост, но он, кажется, устарел: Свифт гироскопа, рыскание, тангаж, крен

Я пытаюсь использовать CoreMotion для вычисления вращения вокруг оси Y и возвратаэто как двойной в Swift Playground на iOS.В настоящее время я пытаюсь понять, как добиться рыскания, потому что из документации Apple для Swift он, кажется, возвращается как двойное, и сохраняет значение как переменную.Это то, что OI уже сделал:

let yaw = 0.0
    if motionManager.isGyroAvailable {
        motionManager.deviceMotionUpdateInterval = 0.2;
        motionManager.startDeviceMotionUpdates()

        motionManager.gyroUpdateInterval = 0.2
        motionManager.startGyroUpdatesToQueue(OperationQueue.currentQueue ?? ) {
            [weak self] (gyroData: CMGyroData!, error: NSError!) in

            self?.outputRotationData(gyroData.rotationRate)
            if error != nil {
                println("\(error)")
            }
        }
    } else {
        print("gyroscope not working")
    }

Я пытаюсь использовать это на игровых площадках Swift на iOS 12 для iPad с самыми последними версиями swift и XCode.

1 Ответ

1 голос
/ 19 марта 2019

Попробуйте это решение.

var motion = CMMotionManager()
var timer: Timer!


 override func viewDidLoad() {
 super.viewDidLoad()
   startData()
 }

func startData() {

    motion.startGyroUpdates()

    timer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(SensorViewController.update), userInfo: nil, repeats: true)

}

private func roundDouble(value: Double) -> Double {
    return round(1000 * value)/100
}

@objc func update() {


    if let gyroMeterData = motion.gyroData {

        print(\"self.roundDouble(value: gyroMeterData.rotationRate.x)")
        print(\"self.roundDouble(value: gyroMeterData.rotationRate.y)")
        print(\"self.roundDouble(value: gyroMeterData.rotationRate.z)")

    }

Надеюсь, это поможет.

...