我看了这篇文章,但似乎已经过时了:Swift gyroscope yaw, pitch, roll
我正在尝试使用CoreMotion来计算围绕Y轴的旋转,并在iOS上的Swift Playground中将其作为double返回。我目前正在尝试解决如何获得偏航,因为从Swift的Apple文档中它似乎以double形式返回,并将值保存为变量。这就是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")
}
我试图在iOS 12上的Swift Playgrounds上使用这款适用于iPad的最新版本的swift和XCode。
试试这个解决方案
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)")
}
希望这会有所帮助。