C3.33.3Continuous gestures are not undo units设计研究

惯性滚动等连续手势本身不是可撤销的操作单元,无需撤销语义

别名: 连续操纵 · 非命令手势 · pan not undoable

概念解释

平移、惯性滚动、捏合、画布旋转改变的是视口或笔画的连续状态,不是一条该进撤销栈的命令。用户不期望“撤销刚才那次滚动”回到三屏之前;他们再滚回去即可。给连续操纵做撤销,会把栈淹没,真正的归档/删除反而被挤掉。

机制

命令有明确的提交边界:一次轻扫归档、一次点按发送。连续操纵的边界是任意的——每帧偏移都能成一条“命令”,撤销粒度无法定义。惯性滚动的停止位置本就不可精确预测,更没有一个用户认可的“上一步”。反向滚动、反向捏合就是其补偿,属于控制本身,不是账本。把视口变化推进撤销,还会与文本编辑的撤销抢槽,摇一摇变成“撤销滚动”的笑话。

怎么研究

问用户在长列表惯性滑停后“撤销”该做什么,记录期望(回到起滑点 / 撤销上一条编辑 / 不理解问题)。观察若把每次滚动推进栈,真正编辑撤销的可达性如何下降。这是期望调查加栈污染测量,不必虚构连续操纵的“撤销率”。

边界

“滚动到某书签 / 恢复阅读位置”是显式命令,可以进栈,但它由按钮或退出页面触发,不是惯性本身。绘图里一笔一划若被定义为笔画命令,抬手可以进栈——那是把连续输入切成了命令单元。缩放若被做成“恢复默认倍率”按钮,也是命令。连续手势无撤销,不表示误翻页的分页轻扫无撤销。

怎么落地

  • 不要把 contentOffset 或缩放倍数的每一次变化推进撤销栈。
  • 为视口提供跟手补偿(再滚、双击还原倍率),而不是撤销按钮。
  • 在含编辑的文档里摇一摇或点撤销:应撤销键入或删除,而不是刚才的滚动。

延伸

  • 同组C3.33.1 手势触发的动作应遵循与点击操作相同的可撤销原则 · C3.33.2 部分手势默认给出短暂撤销窗口而非立即生效 · C3.33.4 不可逆的手势动作应提高触发门槛,而非仅提供撤销
  • 相邻C3.06 快滑与惯性 · C3.07 平移
  • 站内检索undo granularity · continuous manipulation · viewport state

同组卡片

快捷操作

分享

分享当前页面

ios_share

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