1 手势
4 分钟阅读
原文链接: https://developer.apple.com/documentation/swiftui/gestures
1 手势
定义从点按、点击和轻扫到更精细手势的各种交互。
概述
通过为视图添加手势修饰符来响应手势。你可以监听点按、拖拽、捏合以及其他标准手势。

你还可以用 simultaneously(with:)、sequenced(before:) 或 exclusively(before:) 修饰符把各个手势组合成自定义手势,也可以用 modifiers(_:) 修饰符把手势与键盘修饰键结合起来。
重要:当你需要一个按钮时,请使用 Button 实例,而不是点按手势。你可以把任何视图用作按钮的标签,而按钮类型会自动提供用户期望按钮具备的许多标准行为,例如辅助功能标签和提示。
关于设计指导,请参阅 Human Interface Guidelines 中的 手势。
基础
- 用手势添加交互性 — 使用手势修饰符为应用添加交互性。
识别点按手势
- onTapGesture(count:perform:) — 添加一个动作,当该视图识别到点按手势时执行。
- onTapGesture(count:coordinateSpace:perform:) — 添加一个动作,当该视图识别到点按手势时执行,并把交互位置提供给该动作。
- onTapGesture(count:coordinateSpace:inputKinds:perform:) — 添加一个动作,当该视图识别到点按手势时执行,并把交互位置提供给该动作。
- TapGesture — 一种识别一次或多次点按的手势。
- SpatialTapGesture — 一种识别一次或多次点按并报告其位置的手势。
识别长按手势
- onLongPressGesture(minimumDuration:maximumDistance:perform:onPressingChanged:) — 添加一个动作,当该视图识别到长按手势时执行。
- onLongPressGesture(minimumDuration:maximumDistance:inputKinds:perform:onPressingChanged:) — 添加一个动作,当该视图识别到长按手势时执行。
- onLongPressGesture(minimumDuration:perform:onPressingChanged:) — 添加一个动作,当该视图识别到长按手势时执行。
- onLongTouchGesture(minimumDuration:perform:onTouchingChanged:) — 添加一个动作,当该视图识别到遥控器长触摸手势时执行。长触摸手势是指手指放在遥控器触摸表面上却没有真正按下的情况。
- LongPressGesture — 一种在用户执行长按时成功的手势。
识别空间事件
- SpatialEventGesture — 一种提供关于点击、触摸等持续中的空间事件信息的手势。
- SpatialEventCollection — 以某个特定视图为目标的空间输入事件集合。
- Chirality — 某个姿态的手性,也就是左右手习惯。
识别随时间变化的手势
- gesture(_:) — 把一个 NSGestureRecognizerRepresentable 附加到该视图上。
- gesture(_:isEnabled:) — 以比该视图自身定义的手势更低的优先级,把手势附加到该视图上。
- gesture(_:name:isEnabled:) — 以比该视图自身定义的手势更低的优先级,把手势附加到该视图上。
- gesture(_:including:) — 以比该视图自身定义的手势更低的优先级,把手势附加到该视图上。
- DragGesture — 一种拖拽动作,会随着拖拽事件序列的变化调用动作。
- WindowDragGesture — 一种识别并处理窗口拖拽动作的手势。
- MagnifyGesture — 一种识别放大动作并跟踪放大倍数的手势。
- RotateGesture — 一种识别旋转动作并跟踪旋转角度的手势。
- RotateGesture3D — 一种识别三维旋转动作并跟踪旋转角度和轴的手势。
- GestureMask — 一些选项,控制把一个手势添加到视图上会如何影响该视图及其子视图识别到的其他手势。
识别 Apple Pencil 手势
- onPencilDoubleTap(perform:) — 添加一个动作,在用户双击 Apple Pencil 之后执行。
- onPencilSqueeze(perform:) — 添加一个动作,在用户捏压 Apple Pencil 时执行。
- preferredPencilDoubleTapAction — 用户在“设置”应用中选择的、希望双击 Apple Pencil 之后执行的动作。
- preferredPencilSqueezeAction — 用户在“设置”应用中选择的、希望捏压 Apple Pencil 时执行的动作。
- PencilPreferredAction — 用户希望双击 Apple Pencil 之后执行的动作。
- PencilDoubleTapGestureValue — 描述 Apple Pencil 双击手势的值。
- PencilSqueezeGestureValue — 描述 Apple Pencil 捏压手势的值。
- PencilSqueezeGesturePhase — 描述 Apple Pencil 捏压手势的阶段和值。
- PencilHoverPose — 描述 Apple Pencil 悬停在视图边界上方区域时的位置和距离的值。
组合手势
- 组合 SwiftUI 手势 — 组合手势以创建复杂的交互。
- simultaneousGesture(_:including:) — 把手势附加到该视图上,与视图自身定义的手势同时处理。
- simultaneousGesture(_:isEnabled:) — 把手势附加到该视图上,与视图自身定义的手势同时处理。
- simultaneousGesture(_:name:isEnabled:) — 把手势附加到该视图上,与视图自身定义的手势同时处理。
- SequenceGesture — 由两个手势依次组成的手势。
- SimultaneousGesture — 一种包含两个手势的手势,二者可以同时发生,没有先后之分。
- ExclusiveGesture — 一种由两个手势组成、但只有其中一个能成功的手势。
自定义手势
- GestureInputKinds — 一个选项集合,用于指定手势应识别哪些输入类型。
定义自定义手势
- highPriorityGesture(_:including:) — 以比该视图自身定义的手势更高的优先级,把手势附加到该视图上。
- highPriorityGesture(_:isEnabled:) — 以比该视图自身定义的手势更高的优先级,把手势附加到该视图上。
- highPriorityGesture(_:name:isEnabled:) — 以比该视图自身定义的手势更高的优先级,把手势附加到该视图上。
- handGestureShortcut(_:isEnabled:) — 为被修改的控件指定一个手势快捷方式。
- defersSystemGestures(on:) — 设置你希望自己的手势优先于系统手势的屏幕边缘。
- Gesture — 一种把事件序列与手势相匹配,并针对其各个状态返回一串值的实例。
- AnyGesture — 类型被抹除的手势。
- HandActivationBehavior — 一种专用于手部输入驱动的激活行为。
- HandGestureShortcut — 手势快捷方式描述用户为了激活按钮或开关可以执行的手指与手腕动作。
管理手势状态
- GestureState — 一种属性包装器类型,在用户执行手势期间更新某个属性,并在手势结束时把该属性重置回初始状态。
- GestureStateGesture — 一种会更新手势 updating 回调所提供状态的手势。
处理激活事件
- allowsWindowActivationEvents(_:) — 配置该视图层级中的手势是否可以处理激活所属窗口的事件。
已弃用的手势
- MagnificationGesture — 一种识别放大动作并跟踪放大倍数的手势。
- RotationGesture — 一种识别旋转动作并跟踪旋转角度的手势。