gpt4 book ai didi

Swift CMMotionManager 让 Roll、Pitch、Yaw 正常工作

转载 作者:行者123 更新时间:2023-11-30 10:07:54 26 4
gpt4 key购买 nike

我很难获得正确的语法来正确返回 Swift 中的横滚、俯仰、偏航。加速度计都工作正常,但无法解决这个问题。这是 Material 代码:

var roll: Double    = 0.0
var pitch: Double = 0.0
var yaw: Double = 0.0
var manager = CMMotionManager()

override func viewDidLoad() {
manager.startDeviceMotionUpdatesToQueue(NSOperationQueue.currentQueue()!, withHandler: { (rpyData: CMDeviceMotionHandler?, NSError) -> Void in self.outputRPY(rpyData!.deviceMotion)
if(NSError != nil) {
print("\(NSError)")
}
})
}

func outputRPY(data: CMDeviceMotion){
roll = data.attitude.roll
pitch = data.attitude.pitch
yaw = data.attitude.yaw
rollLabel.text = String(format: "%.2f°", roll)
pitchLabel.text = String(format: "%.2f°", pitch)
rollLabel.text = String(format: "%.2f°", yaw)
}

最佳答案

第二个参数类型应该是NSError? (又名可选)并且在闭包主体中,您正在将类型与值进行比较。

总而言之,它应该看起来像这样:

manager.startDeviceMotionUpdatesToQueue(NSOperationQueue.currentQueue()!, withHandler: { (deviceMotion: CMDeviceMotion?, err: NSError?) -> Void in 
self.outputRPY(deviceMotion!)
if(err != nil) {
print("\(err)")
}
}

您还可以使用可选绑定(bind)来更快...:)

if error = err {
print("\(error)")
}

编辑:

在我的家用机器上进行测试后,我意识到还有一个问题。 CMDeviceMotionHandler 声明闭包的类型(或函数指针,如果您愿意的话)。它声明为:

public typealias CMDeviceMotionHandler = (CMDeviceMotion?, NSError?) -> Void

所以你的闭包(或处理程序)应该是这样的:

{ (deviceMotion: CMDeviceMotion?, error: NSError?) -> Void in
// code goes here
}

最后,你的第二个参数是让标识符 NSError 引用一个变量,当它已经是一个类型时(这是合法的)。我个人不会这样命名它,因为它很容易与 NSError 类型混淆。也许您可以将其命名为 nserror,这样可以避免与现有类型发生任何混淆。

第一个代码片段应该复制粘贴到您的项目中。

关于Swift CMMotionManager 让 Roll、Pitch、Yaw 正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35047165/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com