C2.16.2touch cancel event设计研究

取消事件由系统在来电、通知等场景下打断触摸序列时触发

别名: 触摸取消 · 系统打断 · touchcancel

概念解释

取消事件(touch cancel)不是用户把手指滑出按钮那种主动反悔,而是系统在接触尚未结束时强行切断序列。来电全屏、闹钟、权限对话框、控制中心、系统导航手势抢走触点,都会让正在进行的开始—移动链突然收到 cancel。手指可能还贴在玻璃上,但应用已经失去这条接触的所有权。

机制

窗口焦点、手势仲裁和电源/电话等系统服务可以在任意时刻插入比前台应用更高的输入优先级。一旦仲裁判定“这条轨迹不再属于该窗口”,系统不能再发结束:结束常常被控件解读为确认抬起。它改发取消,明确告诉应用“候选作废,不要提交”。来电和通知是最容易观察的例子,因为它们改的是前台场景而不是触点坐标;系统边缘手势则是另一类来源,轨迹在应用里看起来像普通移动,随后被系统收走。取消因此是所有权转移的信号,不是位置越界的信号。

怎么研究

构造可复现的打断脚本:在按住滑块、拖动列表项或按住发送键的中途拉起系统界面。自变量是打断类型(来电、通知抽屉、权限框、系统手势)、打断发生在按下后多少毫秒、以及被打断对象是否已越过拖动阈值。因变量是是否收到 cancel、收到前最后一次移动坐标、以及应用是否仍把后续真实抬起当成一次点击。同一打断在不同系统版本上可能变成“先抢走再补 cancel”或“直接丢后续点”,所以结果要绑在具体 OS 上读,不能写成通用时序。

边界

并非所有遮挡都会产生取消。toast、不抢焦点的横幅、画中画小窗可能让触摸继续走完结束。用户自己滑出目标再抬起,走的是结束路径上的“不命中”,不是系统 cancel。没有电话权限的测试机也很难稳定制造来电打断。车机、工控屏若没有通知栈,这条机制可能根本不出现;此时更常见的中断是看门狗复位或触控 IC 超时,事件名不一定叫 cancel。

怎么落地

  • 把来电、控制中心、系统返回手势列入手势测试清单,专门打在拖动和按住过程中,而不是只在空闲界面弹一次。
  • 收到 cancel 时按“未发生”恢复:滑块回到按下前的值,列表项退回原位,发送键取消高亮。
  • 不要用下一次 touch begin 去顺便清理上一次被打断的状态;两次接触之间用户可能什么也没碰到。

延伸

  • 同组C2.16.1 触摸事件通常分为开始、移动、结束、取消四种类型 · C2.16.3 应用必须处理取消事件,否则会遗留未完成的按压态 · C2.16.4 多点触控下每个触点独立携带开始移动结束的完整生命周期
  • 相邻C2.08 触摸的取消手势 · C3.19 手势冲突与消歧
  • 站内检索touch cancel · system interruption · gesture arbitration

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/C2.16.2