我无法使用UISlider控制真实设备的位置。设备接受方向命令(缩回或扩展),但不接受绝对位置的命令。它在查询时报告其当前位置。
例如,如果设备位于位置50并且我使用UISlider将所需位置设置为25,则程序命令设备朝向25的方向前进。可能需要几秒钟,因此我反复查询它,并且一旦达到25,我命令设备停止。我当前的(未经测试的)代码如下所示:
func sliderMoved(_ label : UILabel, openCharacteristicNum : Int, closeCharacteristicNum : Int, sender: UISlider){
let actuatorPosition = getActuatorPosition(label)
// run this on a background thread
DispatchQueue.global(qos: .background).async {
if (actuatorPosition > sender.value) {
// stop closing and start opening
self.writeValue(closeCharacteristicNum, value: 1)
self.writeValue(openCharacteristicNum, value: 0)
while actuatorPosition > sender.value {
actuatorPosition = getActuatorPosition(label)
}
// stop opening
self.writeValue(openCharacteristicNum, value: 1)
}
else if (actuatorPosition < sender.value) {
// stop opening and start closing
self.writeValue(openCharacteristicNum, value: 1)
self.writeValue(closeCharacteristicNum, value: 0)
while actuatorPosition < sender.value {
actuatorPosition = getActuatorPosition(label)
}
// stop closing
self.writeValue(closeCharacteristicNum, value: 1)
}
}
}
这感觉是解决问题的一种非常低效的方式(我不是用while循环阻止线程的粉丝)但是我在找到更好的方法时遇到了麻烦。
答案 0 :(得分:0)
我最终使用计时器来定期监控设备的位置,这比使用while循环要好得多。