在swift-DJI Mobile SDK iOS中访问状态信息
我不知道如何获取简单的状态数据,比如当前的万向节节 我还没有发现DJISDK和xcode中实际工作的东西之间有可靠的联系。SDK给了我提示,并与xcode自动完成一起缓慢地向前推进 附说明: “当前万向架姿态,以度为单位。如果万向架与飞机水平,并指向北极的前进方向,则横滚、俯仰和偏航为0。”-太好了 但是,它不会在xcode中自动完成,也不会编译 测试的其他方法:在swift-DJI Mobile SDK iOS中访问状态信息,ios,swift,dji-sdk,Ios,Swift,Dji Sdk,我不知道如何获取简单的状态数据,比如当前的万向节节 我还没有发现DJISDK和xcode中实际工作的东西之间有可靠的联系。SDK给了我提示,并与xcode自动完成一起缓慢地向前推进 附说明: “当前万向架姿态,以度为单位。如果万向架与飞机水平,并指向北极的前进方向,则横滚、俯仰和偏航为0。”-太好了 但是,它不会在xcode中自动完成,也不会编译 测试的其他方法: var gimbalStateInformation = DJIGimbalState() print(gimbalStat
var gimbalStateInformation = DJIGimbalState()
print(gimbalStateInformatoin.attitudeInDegrees.pitch.description)
-->所有俯仰滚转和偏航值均为0.0
var gimbalStateInformation = DJUGimbalAttitude()
print(gimbalStateInformatoin.pitch.description)
-->所有俯仰滚转和偏航值均为0.0
var gimbalStateInformation = DJUGimbalAttitude()
print(gimbalStateInformatoin.pitch.description)
我试图通过按键获取信息,但当我运行代码时,我的应用程序崩溃了
func getGimbalAttitude(){
// Get the key
guard let gimbalAttitudeKey = DJIGimbalKey(param: DJIGimbalParamAttitudeInDegrees) else {
print("Could not create DJIGimbalParamAttitudeInDegrees key")
return
}
// Get the keyManager
guard let keyManager = DJISDKManager.keyManager() else {
print("Could not get the key manager, manke sure you are registered")
return
}
// Test if key is available
let testing = keyManager.isKeySupported(gimbalAttitudeKey)
self.statusLabel.text = String(testing) // This comes out true
// Use key to retreive info
let gimbalAttitudeValue = keyManager.getValueFor(gimbalAttitudeKey)
let gimbalAttitude = gimbalAttitudeValue?.value as! DJIGimbalState
_ = gimbalAttitude.attitudeInDegrees.pitch
// --> Application crashes on the line above
}
我正在努力打造一款Mavic Mini
请提供如何将DJI Mobile SDK连接到Swift的一般建议,特别是如何读取当前万向节节节值。您可以通过其DIDDUPDATE state委托功能访问当前万向节节节节
导入DJISDK
类万向节控制器:NSObject,DJIGimbalDelegate{
让万向节:Djiginbal
初始(万向节:Djiginbal){
self.gimbal=万向节
super.init()
gimbal.delegate=self
}
func万向节(gimbal:djiginbal,didUpdate状态:djiginbalstate){
打印(状态、姿态、音高)
}
}
//在其他类中创建自定义万向节控制器的实例
//并将万向节实例传递给它
如果let airpair=djiskmanager.product()为?迪亚拉飞机{
如果让万向节=飞机。万向节{
设常平架控制器=常平架控制器(常平架:常平架)
}
}
猜测您的代码可能会崩溃,因为隐式解包了一个可选值,该值为nil-在本例中,gimbalatitudevalue可能为nil。最好使用as?
而不是as安全地展开值代码>或使用guardBrien,谢谢您的帮助!隐式展开是原因,尽管GimbalatitudEvalue不是零。”如果让gimbalatitudevalue:djikeyeydvalue=keyManager.getValueFor(gimbalatitudekey){如果让gimbalatitude=gimbalatitudevalue.value作为?djimimbalatitude{print(“.pitch是:”+String(gimbalatitude.pitch))返回gimbalatitude}否则{print(“代码在这里结束”)}}否则{print(“代码不在这里结束”)}非常感谢!不过,恐怕我需要更多的指导..我能想到的将DJIGimbalState传递给函数的唯一方法是调用DJIGimbalState()。但这不会导致正确更新的万向节间距。请给我一个其他提示。您是否管理此操作以在Mavic Mini上工作?顺便说一句,我成功地使用了DjigimbalParamattityAwRelativeToAircrafter的键读取方法,但没有将其转换为Djigimbalatitude,而是将其转换为Double。上面的函数是一个委托函数-它是caDJI SDK每秒自动调用多次。您不需要调用DJIGimbalState()-那只是初始化一个没有值的DJIGimbalState类型的对象。是的,它在Mavic mini上工作,对我来说没有问题-我更新了代码,它应该打印万向节节的当前值。如果没有,那么可能您编写的另一段代码已经实现了DJIGimbalDelegate?它应该只在Cebrien上实现一次,我是v非常感谢您的帮助,但我缺少了一些东西。没有打印任何内容。当我有时间时,我会将代码精简到最低限度,然后从那里开始,我会在找到答案后在这里发布。再次感谢您的帮助。我还没有实际测试我上面编写的代码,但我遗漏的一个关键部分是设置自定义c的实例上面的lass是正在运行的万向节实例的代理。我更新了代码以反映。我怀疑这可能是问题所在。因此,如果您想要一个好的Swift示例来检查并了解它们是如何实现的,请查看Drone Pan