【发布时间】:2014-12-10 06:20:21
【问题描述】:
我有一个关于如何使用控制硬件的滑块的一般 UI 问题。
假设我有一个音频硬件,它总是报告当前设置的音量。发送此数据后,可以将 UI 滑块设置到正确的位置。
问题在于,当用户移动滑块以更新硬件音量时,用户移动滑块的速度通常会比硬件报告回其当前音量的速度更快。结果是,当用户移动滑块时,滑块会不断地四处跳动,因为每次接收到来自硬件的体积数据时它都会改变它的位置。
我可以看到一些解决方案,但它们看起来都很丑陋,我想知道它们是否是解决看似非常普遍的问题的最佳实践解决方案。
可能的解决方法:
- 仅当用户停止滑动滑块时才向硬件发送新的滑块值
如果您想在滑块移动时听到音量变化,这并不好。
- 当用户移动 UI 滑块时,不要在收到硬件数据时更新其值。
这样做的问题是,在发布时,硬件可能没有“赶上”,滑块会捕捉到用户设置的不同值。
例如也许硬件正在移动一个需要时间才能到达最终位置的伺服系统。滑块会“请求”一个新位置,但硬件需要时间才能到达该新位置,同时它会报告当前所处的位置。
- 扩展上述解决方案并添加定时器延迟,以防止从硬件源更新 UI 几秒钟。在延迟期间,缓存最新的硬件值。
在伺服示例中,用户仍有可能将滑块从 0 移动到 1,但在 x 秒延迟之后,伺服仅处于 0.5,因此滑块会捕捉到 0.5,然后慢慢变为 1。
- 创建一个非标准滑块,其中包含两个滑块小块,一个用于用户交互以“设置”值,另一个用于显示硬件的当前位置/值。
这一切看起来都相当复杂,我想知道是否有标准的方法来做到这一点。
【问题讨论】:
-
如何:当用户移动 UI 滑块并释放它时,禁用滑块直到硬件赶上该值。这对我来说似乎更直观......只要我拿着 UI 滑块,我希望值会不断变化,但是当我完成时,我希望值 [最终] 稳定到我想要的输入。跨度>
-
我认为这不会奏效,因为它会使用户无法对硬件进行可能至关重要的调整。例如像起重机这样的大型工业设备。
标签: user-interface slider hardware updates latency