【问题标题】:UI sliders that control hardware, latency issue控制硬件的 UI 滑块,延迟问题
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 我承认我的起重机示例确实处于极端。典型的用例是硬件在用户将滑块移动到新位置后的几毫秒内报告其当前值;这会导致滑块从硬件当前的位置(因为消息从硬件发送到应用程序)和用户当前拖动光标的位置跳动。这似乎是一个常见的问题,必须有一个共同的解决方案,但我觉得我把潜在的解决方案复杂化了。
  • @gmcc051 滑块是您唯一的选择吗?它似乎给你带来了一些问题。我曾经制作了一个 UI 解决方案,用于使用上/下箭头移动连接到电机的重物,并使用滚珠丝杠。按下箭头将向电机发送命令以移动到其顶部或底部位置,释放箭头将发送停止命令以停止运动。 UI 将从电机接收值并在屏幕上绘制正确的图像。这很简单,但被证明非常有效。
猜你喜欢
  • 2011-04-11
  • 2023-04-10
  • 2015-06-13
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
相关资源
最近更新 更多