C3.19.2Gesture disambiguation order设计研究
按方向、速度、指数、时长分流的判别顺序
别名: 手势分流 · 特征判别顺序 · recognizer arbitration
概念解释
消歧不是把所有特征一锅煮,而是按规定顺序用方向、速度、指数、时长把候选砍掉。指数往往最早可观测(第二指落下),方向需要一段位移,速度还要一段时间窗,时长最晚才到期。顺序一旦反了——例如先等长按再看方向——整条交互会被最慢的那个特征拖死。
机制
四个特征的信息到达时间不同。第二指出现可立即排除单指轻扫;位移向量与主轴的夹角可在十余像素内排除正交手势;速度要等一个短窗口才能把平移和轻扫分开;长按时钟则可能要数百毫秒。稳定的做法是:先用已到达的硬特征做否决,再让慢特征只在仍并列的候选之间工作。iOS 的 failure-requirement 链、Android 上 ScaleGestureDetector 与单击检测的配合,本质上都是在编排这张时间表,而不是调一个魔法阈值。
怎么研究
构造最小冲突集(例如纵向滚动 × 横向侧滑 × 长按菜单 × 双指缩放),系统改变特征检测的先后,测量决策时间、各类误判率和用户是否感到“手势被吃掉”。自变量是顺序本身,不是单一阈值。日志应标出每个特征首次越过阈值的时刻,才能看出是顺序错了还是阈值错了。
边界
只有一种手势的区域不需要这套顺序。压感、触控笔按钮、或系统已在驱动层分流的手指数,会改写“最早特征是什么”。速度与方向的联合阈值属于另一类分类器,不能把这条的先后关系套进去当速度标定。系统手势若在应用看到事件前就做完分流,应用内顺序再精巧也无效。
怎么落地
- 画出该屏幕上每只识别器依赖的特征及它们的最早可读时刻,按到达顺序编排失败依赖。
- 让指数和方向做否决,让时长只决定长按,不要用长按时钟去阻塞滚动。
- 用同一组含糊手势分别打乱顺序做 A/B:看“本该滚动却弹出菜单”是否随把时长放到最后而下降。