如何以快速的语言在watchKit中为gyroActive或gyro进行编码?

问题描述 投票:-1回答:2

我已经阅读以下有关gyroAvailable的文章,可在watchKit中以快速语言显示。

https://developer.apple.com/library/watchos/documentation/CoreMotion/Reference/CMMotionManager_Class/index.html#//apple_ref/occ/instp/CMMotionManager/gyroActive

但是我不怎么写代码,我在哪里写(哪个文件)?

任何帮助将不胜感激。

ios xcode swift watchkit core-motion
2个回答
2
投票

您可以将陀螺仪代码添加到手表扩展中的任何类,但是您可能希望将其添加到WKInterfaceController的子类中>

这里希望实现看起来像:

import WatchKit
import CoreMotion    

class GyroInterfaceController: WKInterfaceController {

        let motionManager = CMMotionManager()

        override func awakeWithContext(context: AnyObject?) {
            super.awakeWithContext(context)
            motionManager.gyroUpdateInterval = 0.1
        }

        override func willActivate() {
            super.willActivate()

            if (motionManager.gyroAvailable == true) {
                motionManager.startGyroUpdatesToQueue(NSOperationQueue.currentQueue()!, withHandler: { (data, error) -> Void in
                    guard let data = data else { return }
                    let rotationX = data.rotationRate.x
                    let rotationY = data.rotationRate.y
                    let rotationZ = data.rotationRate.z
                    // do you want to want to do with the data
                })
            } else {
                print("Gyro not available")
            }
        }

        override func didDeactivate() {
            super.didDeactivate()
            motionManager.stopGyroUpdates()
        }
    }

从理论上讲,这应该起作用。如果您尝试这样做,您将看到它只会打印(“陀螺仪不可用”)。似乎陀螺仪数据尚无法访问。希望苹果公司能够在不久的将来使它变得可访问。

同时,您至少可以使用来自加速度计的数据。那是可访问的。该代码看起来非常相似:

import WatchKit
import CoreMotion

class AccelerometerInterfaceController: WKInterfaceController {

    let motionManager = CMMotionManager()

    override func awakeWithContext(context: AnyObject?) {
        super.awakeWithContext(context)
        motionManager.accelerometerUpdateInterval = 0.1
    }

    override func willActivate() {
        super.willActivate()

        if (motionManager.accelerometerAvailable == true) {
            motionManager.startAccelerometerUpdatesToQueue(NSOperationQueue.currentQueue()!, withHandler: { (data, error) -> Void in
                guard let data = data else { return }
                let accelerationX = data.acceleration.x
                let accelerationY = data.acceleration.y
                let accelerationZ = data.acceleration.z
                // do you want to want to do with the data
            })
        }
    }

    override func didDeactivate() {
        super.didDeactivate()
        motionManager.stopAccelerometerUpdates()
    }
}

当然,这只能在Apple Watch上使用,而不能在模拟器上使用。


0
投票

我尝试了这个,并花了一些时间寻找答案,解决方案是使用MotionUpdates。

© www.soinside.com 2019 - 2024. All rights reserved.