C3.19.2Gesture disambiguation order设计研究

按方向、速度、指数、时长分流的判别顺序

别名: 手势分流 · 特征判别顺序 · recognizer arbitration

概念解释

消歧不是把所有特征一锅煮,而是按规定顺序用方向、速度、指数、时长把候选砍掉。指数往往最早可观测(第二指落下),方向需要一段位移,速度还要一段时间窗,时长最晚才到期。顺序一旦反了——例如先等长按再看方向——整条交互会被最慢的那个特征拖死。

机制

四个特征的信息到达时间不同。第二指出现可立即排除单指轻扫;位移向量与主轴的夹角可在十余像素内排除正交手势;速度要等一个短窗口才能把平移和轻扫分开;长按时钟则可能要数百毫秒。稳定的做法是:先用已到达的硬特征做否决,再让慢特征只在仍并列的候选之间工作。iOS 的 failure-requirement 链、Android 上 ScaleGestureDetector 与单击检测的配合,本质上都是在编排这张时间表,而不是调一个魔法阈值。

怎么研究

构造最小冲突集(例如纵向滚动 × 横向侧滑 × 长按菜单 × 双指缩放),系统改变特征检测的先后,测量决策时间、各类误判率和用户是否感到“手势被吃掉”。自变量是顺序本身,不是单一阈值。日志应标出每个特征首次越过阈值的时刻,才能看出是顺序错了还是阈值错了。

边界

只有一种手势的区域不需要这套顺序。压感、触控笔按钮、或系统已在驱动层分流的手指数,会改写“最早特征是什么”。速度与方向的联合阈值属于另一类分类器,不能把这条的先后关系套进去当速度标定。系统手势若在应用看到事件前就做完分流,应用内顺序再精巧也无效。

怎么落地

  • 画出该屏幕上每只识别器依赖的特征及它们的最早可读时刻,按到达顺序编排失败依赖。
  • 让指数和方向做否决,让时长只决定长按,不要用长按时钟去阻塞滚动。
  • 用同一组含糊手势分别打乱顺序做 A/B:看“本该滚动却弹出菜单”是否随把时长放到最后而下降。

延伸

  • 同组C3.19.1 同一起始动作被多个手势竞争 · C3.19.3 判别期内不得提交不可逆动作 · C3.19.4 嵌套滚动容器的触点归属规则
  • 相邻C3.28 手势的方向锁定 · C3.29 手势的速度阈值
  • 站内检索disambiguation order · finger count · failure requirement

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/C3.19.2