Highlight
iPadOS 指针通过 Adaptive Precision 在按钮、文本、自定义区域和手势之间动态调整精度,并用 Highlight、Lift、Hover、custom shape 与 trackpad gestures 把触控式界面适配为间接输入。
核心内容
iPad 的界面先为手指服务。按钮有更大的点击区域,控件之间留出空间,拖动和选择都默认接受一个指尖大小的输入。触控板进入 iPadOS 后,问题不只是“能不能点击”。传统桌面指针能精确到像素,但很多 iPad 控件只需要知道用户点中了哪个按钮、哪一行文字或哪一个时间段。
Apple 的答案是 Adaptive Precision。指针平时是一个接近指尖大小的圆形;靠近按钮时,它会吸附到按钮并变成按钮的形状;移动到文本时,它会变成和行高匹配的 beam;进入自定义日程视图时,它可以按 15 分钟区块吸附。指针的精度跟随界面语义变化,用户不必把鼠标停在几个像素的边界上。
这场 session 把指针拆成三层来看。第一层是设计原则:指针要补充触控,而不是替代触控。第二层是视觉效果:Highlight、Lift、Hover 和 custom shape 分别服务不同尺寸、不同背景、不同交互密度的控件。第三层是交互加速:hover 可以提前暴露工具栏,secondary click 可以直接打开 context menu,两指手势要相对于指针所在的 view 生效。
如果你的 App 已经大量使用标准 UIKit 控件,按钮和文本的基础指针行为可以免费获得。真正需要设计判断的地方,是自定义画布、密集工具栏、表格边界、地图、阅读器和日程类界面。这些区域需要你决定指针应该吸附到哪里、变成什么形状、是否显示 hover 反馈,以及触控板手势和触摸手势如何保持一致。
详细内容
1. Adaptive Precision 先解决误点问题
(03:36)传统指针和 iPad 控件之间有一个精度错位:指针按像素移动,按钮只关心命中哪个区域。iPadOS 把指针默认设计成圆形,并在靠近按钮组时吸附到按钮、变形成按钮轮廓。形状变化本身就是反馈,告诉用户当前目标是哪一个控件。
(05:10)文本选择使用另一种精度。指针进入 TextView 后变成和行高匹配的 beam,垂直方向按行吸附,水平方向仍保留像素级精度。这样既能避免点到上一行或下一行,又能把插入点放到具体字符位置。
(06:55)标准 UIKit 控件可以直接获得按钮和文本行为。自定义视图要自己表达语义。session 的日程视图例子把垂直方向吸附到 15 分钟区间,让用户拖拽创建事件时提前知道开始时间会落在 2:15 还是 2:30。
2. 指针背后有 model pointer、snapping、recentering 和 magnetism
(08:50)屏幕上看到的是 visible pointer,系统内部还有一个 invisible model pointer。model pointer 记录真实位置,用来判断 hover 命中了哪个 hit area。visible pointer 可以向目标控件动画吸附,同时通过 parallax 表示真实位置仍在边缘。
(10:11)recentering 会在用户抬起手指后把指针居中到控件上,减少下一次点击时因手指轻微滚动而离开按钮的概率。指针还会自动隐藏,避免一直提醒用户“现在要用触控板”,让触摸、Apple Pencil 和指针可以自然切换。
(12:10)iPadOS 复用了 macOS 的 acceleration curve,并加入 inertia 与 magnetism。inertia 让用户用一次快速滑动跨过更远距离;magnetism 会根据 projected position 和滑动方向扫描附近目标,把指针落到最可能的 snappable element 上。任何支持 pointer snapping 的控件都能得到这层行为。
3. 三种 pointer effect 对应不同控件尺寸
(14:23)Pointer Effect 是指针和内容在 hover 时合成一个焦点状态。Highlight 适合没有背景的小控件,例如 bar button 和 tab bar;指针会移到内容背后,变成控件背景,并通过 parallax 和 light effect 连接手势位置。
(15:40)Lift 适合已有背景的中等尺寸元素,例如 App icon 和 Control Center module。指针消失到元素背后,元素放大、投影,颜色在背景上产生 radiosity。specular light 还承担第二个任务:显示底层指针的真实位置。
(17:16)Hover 适合更大的对象,这些对象如果让指针直接变成它们的形状会表现很差。Hover 可以只改变对象外观,指针保持默认形状并停留在对象上方。它还能组合 scale、shadow、tint 和 custom shape。
4. 先试 Automatic Effect,再处理一致性和 hit region
(17:55)Apple 建议先使用 Automatic Effect。系统会根据对象类型、位置、大小和形状选择效果,这些规则未来还会更新。只有当自动结果和上下文不一致时,才需要手动指定。
(18:31)Books 的 bookmark icon 看起来像可以用 Lift,因为它有自己的背景;但它位于 toolbar 中,旁边按钮都用 Highlight。为了同组一致,它也应该使用 Highlight。segmented control 的 selected option 则是反例:矩形对象外面套 Highlight 会显得多余,Lift 更合适。
(20:01)hit region 影响 pointer effect 的激活范围。太小会让用户觉得必须非常精确,太大会让指针难以脱离。带 bezel 的元素可以考虑约 12 points padding,不带 bezel 的元素可以考虑约 24 points padding。同组对象之间不要留空洞,避免指针在中间恢复成圆形并产生多余动画。
5. custom pointer 要让形状直接表达意图
(24:28)iPadOS 指针的 material 会根据背景自动调整颜色,保持对比度,同时不遮挡内容。变成按钮形状时,颜色会变亮以保证标签可读;点击时圆形会缩小并变暗,给出明确的 click feedback。
(25:40)默认圆形代表触控。它可以变成 rounded rectangle、vertical bar、horizontal pill,也可以变成任意形状。cross shape 可以表示更高精度区域;一对三角形可以表示拖动方向;按住 Command 键改变指针功能时,形状也能提示模式变化。
(28:03)custom pointer 的形状要简单、容易理解,并尽量使用 solid shape。默认指针是 19 point circle;窄形状需要调整尺寸维持视觉重量,session 里的 cross mark 是 24 points。anchor point 也要谨慎:有方向性的形状会让变形显得偏心,能用居中目标形状表达时,优先保持中心锚点。
(30:02)阅读和标注文本的例子很具体。与其把 pointer 做成 marker pen glyph,不如做成 marker tip shape。后者同时表达文本选择高度,并和 I-beam 的 snapping、adaptive precision 行为一致。Apple 还提醒,不要为装饰创建 custom pointer;用户会把指针变化理解为可用功能。
6. 指针交互可以加速已有操作
(32:50)指针带来更高精度,但不应该迫使 App 重做布局、提高密度,或加入只能用指针完成的功能。Numbers 的列宽调整示例说明了正确方向:用户用手指时先选中列头再拖动把手;用指针时可以直接移到列间分隔线上拖动,功能相同,路径更短。
(36:24)pointer hover 是意图信号。Books 可以在阅读时隐藏 toolbar,指针移到上方区域时立即显示;全屏播放或沉浸式体验也可以在 pointer movement 出现时恢复控制条。click and drag 还能直接进入 drag-and-drop 或 drag select,省去触摸场景中为了区分滚动而需要的长按等待。
(37:50)一指交互主要留给 pointing 和 clicking,三指手势留给系统,多数 App 应关注两指 trackpad gesture。手势应发生在 pointer 下方的 view 上。Maps 的例子显示,两指滚动、缩放和旋转都以指针所在位置为锚点,像把两根手指放在屏幕上同一个位置操作。
(39:35)secondary click 可以来自触控板两指点击、鼠标副键或 Control-click。系统默认用它立即显示 context menu。对于自定义界面,它适合加速原本需要 long press 或特殊模式才能触发的替代操作。
核心启发
-
给日程和时间轴做区间吸附:做什么:让创建事件、剪辑片段或拖动时间块时的指针吸附到实际可接受的时间粒度。为什么值得做:session 的日程视图把开始时间对齐到 15 分钟区间,减少用户拖到边界时的猜测。怎么开始:先定义业务接受的区间,再让 hover 反馈和拖动预览始终落在同一组区间上。
-
让阅读器和播放器用 hover 暴露控制条:做什么:内容区域保持沉浸,指针移动到工具栏区域或开始移动时再显示控制。为什么值得做:Books 示例说明 pointer position 可以表达下一步意图,用户不需要先点击一次才找回工具。怎么开始:把控制条显示规则从 tap-only 调整为 hover region、pointer movement 和 inactivity timer 的组合。
-
为文本标注工具设计 marker tip pointer:做什么:在阅读、批注、PDF 或代码审阅工具里,把高亮工具的指针做成能表示选区高度的 tip shape。为什么值得做:session 明确把 marker tip 作为优于 marker pen glyph 的方案,因为它同时表达选择高度和 I-beam 类行为。怎么开始:用接近默认指针视觉重量的 solid shape,保持中心 anchor,并让它只在真正改变选择行为的区域出现。
-
让表格和画布暴露精确拖拽入口:做什么:列宽分隔线、裁剪边界、控制点和小把手在指针靠近时直接可拖。为什么值得做:Numbers 示例没有增加新功能,只是利用指针精度跳过“先选中再找把手”的步骤。怎么开始:找出触摸路径中需要长按、先选中或打开模式的拖拽操作,给这些边界增加 hover 反馈和更合适的吸附范围。
-
把两指手势绑定到指针下方对象:做什么:地图、白板、图片编辑器或多栏界面中,两指滚动、缩放、旋转都作用于指针所在 view。为什么值得做:Maps 示例展示了指针作为手势锚点后,用户可以在地图和卡片之间自然切换操作对象。怎么开始:先明确每个区域支持哪些两指手势,再保证缩放和旋转围绕 pointer location 发生。
关联 Session
- Build for the iPadOS pointer — 讲解如何用 pointer interaction APIs 实现指针效果、区域和形状定制。
- Handle trackpad and mouse input — 覆盖 pointer movement、pointer lock、scroll input、trackpad gestures、鼠标按键和修饰键。
- Support hardware keyboards in your app — 解释 iPad 与 Mac Catalyst App 中的键盘快捷键、修饰键和 responder chain。
- Designed for iPad — 从 iPad 设计模式出发,讨论 sidebar、拖放、多点触控、Pencil、键盘和触控板。
评论
GitHub Issues · utterances