我已经阅读以下有关gyroAvailable的文章,可在watchKit中以快速语言显示。
但是我不怎么写代码,我在哪里写(哪个文件)?
任何帮助将不胜感激。
您可以将陀螺仪代码添加到手表扩展中的任何类,但是您可能希望将其添加到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上使用,而不能在模拟器上使用。
我尝试了这个,并花了一些时间寻找答案,解决方案是使用MotionUpdates。