User interface 控制硬件的UI滑块,延迟问题

User interface 控制硬件的UI滑块,延迟问题,user-interface,slider,hardware,updates,latency,User Interface,Slider,Hardware,Updates,Latency,我有一个关于如何使用控制硬件的滑块的一般UI问题 假设我有一个音频硬件,它总是报告它设置的当前音量。通过发送这些数据,可以将UI滑块设置到正确的位置 问题是,当用户移动滑块以更新硬件的卷时,用户移动滑块的速度通常比硬件报告其当前卷的速度快。结果是,当用户移动滑块时,滑块会在每次接收到来自硬件的体积数据时改变其位置,从而不断跳跃 我可以看到一些解决方案,但它们看起来都很丑陋,我想知道它们是否是解决一个非常常见问题的最佳实践解决方案 可能的解决办法: 仅当用户停止滑动滑块时,才将新滑块值发送到硬件

我有一个关于如何使用控制硬件的滑块的一般UI问题

假设我有一个音频硬件,它总是报告它设置的当前音量。通过发送这些数据,可以将UI滑块设置到正确的位置

问题是,当用户移动滑块以更新硬件的卷时,用户移动滑块的速度通常比硬件报告其当前卷的速度快。结果是,当用户移动滑块时,滑块会在每次接收到来自硬件的体积数据时改变其位置,从而不断跳跃

我可以看到一些解决方案,但它们看起来都很丑陋,我想知道它们是否是解决一个非常常见问题的最佳实践解决方案

可能的解决办法:

  • 仅当用户停止滑动滑块时,才将新滑块值发送到硬件
如果您想听到滑块移动时音量的变化,则这不太好

  • 当用户移动UI滑块时,在收到硬件数据时不要更新其值
问题是,在发布时,硬件可能没有“赶上”,滑块会捕捉到用户设置的不同值

e、 g.可能硬件正在移动伺服,需要时间才能到达最终位置。滑块将“请求”一个新位置,但硬件需要时间才能到达该新位置,同时报告其当前位置

  • 扩展上述解决方案并添加计时器延迟,以防止从硬件源更新UI几秒钟。在延迟期间,缓存最新的硬件值
在伺服示例中,use仍有可能将滑块从0移动到1,但在x秒延迟后,伺服仅为0.5,因此滑块捕捉到0.5,然后缓慢移动到1

  • 创建一个非标准滑块,该滑块具有两个滑块NUB,一个用于用户交互以“设置”值,另一个用于显示硬件的当前位置/值

这一切似乎都相当复杂,我想知道是否有一种标准的方法来做到这一点。

当您处理如此多的用例和可能不同的硬件时,很难想出一个标准的解决方案。事实上,对于音频设备和安全关键型设备,如起重机,您可能不希望使用相同的方法。
另一个想法是限制UI滑块的移动速度,使其与硬件匹配。这可能意味着UI滑块不再具有平滑操作,而是会跳转到很小的间隔。如果你的硬件足够快,这可以使工作


或者,我建议看一看滑动条以外的东西:例如箭头。您可以使用向上/向下箭头按钮来增加/减少硬件值。由于您的硬件会向您报告其位置,因此您可以使用该数据在UI上绘制一些东西(如果您知道最小和最大限制,这会非常好地工作),并且您可以避免硬件跟上UI的问题,因为现在情况正好相反。

如何:当用户移动UI滑块并释放它时,禁用滑块,直到硬件赶上该值。这对我来说似乎更直观。。。只要我按住UI滑块,我希望值会不断变化,但当我完成时,我希望值[最终]满足我所需的输入。我认为这不会起作用,因为它会阻止用户对硬件进行可能至关重要的调整。e、 像起重机这样的大型工业设备。我承认我的起重机例子肯定是极端的。典型的用例是硬件在用户将滑块移动到新位置的毫秒内报告其当前值;这会导致滑块从硬件当前所在的位置(由于从硬件发送到应用程序的消息)以及用户当前拖动光标的位置开始跳跃。这似乎是一个常见的问题,必须有一个共同的解决方案,但我觉得我把潜在的解决方案复杂化了。@gmcc051滑块是您唯一的选择吗?这似乎给你带来了一些问题。我曾经做过一个UI解决方案,使用向上/向下箭头移动连接到带有滚珠丝杠的电机上的砝码。按下箭头将向电机发送移动到其顶部或底部位置的命令,松开箭头将发送停止命令以停止移动。用户界面将接收来自电机的值,并在屏幕上绘制正确的图像。这很简单,但被证明是相当有效的。