用途:在实现 SwiftUI 手势(点击、拖拽、长按、缩放、旋转)、组合手势、管理手势状态或调试手势冲突时提供参考。
主要能力:
- 基础手势:TapGesture、DragGesture、LongPressGesture、MagnificationGesture、RotationGesture 的用法与参数说明(如 minimumDuration、maximumDistance)。
- 手势组合:.simultaneously(同时)、.sequenced(先后)、.exclusively(互斥),用于解决点击与拖拽冲突、长按后再拖拽等场景。
- 状态管理:区分 @GestureState(手势期间临时状态,结束自动重置)与 @State(提交后的持久状态),并说明 updating 参数与 transaction 动画定制。
- 自定义手势:通过实现 Gesture 协议、map 与 eraseToAnyGesture 封装可复用逻辑(如带方向的滑动手势)。
- 速度与预测:使用 predictedEndLocation 等实现惯性、抛掷动画。
- 无障碍:用 accessibilityAdjustableAction、accessibilityAction 为 VoiceOver 提供替代交互,macOS 可用 onKeyPress 提供键盘替代。
- 跨平台:iOS、macOS、visionOS 上各手势的输入方式差异与条件编译处理。
使用方式:以 SwiftUI 视图修饰符 .gesture、.simultaneousGesture、.highPriorityGesture 挂载手势,配合 @GestureState/@State 管理状态。
适用场景:可拖拽卡片、图片查看器(拖拽+缩放)、列表滑动操作、长按进入编辑再拖拽排序等。
限制与注意:避免在 onChanged 中直接修改 @State 造成卡顿;手势可能阻塞 ScrollView 滚动,需用 simultaneousGesture 等处理;点击操作优先用 Button 而非 onTapGesture;需处理手势取消与状态重置。具体 API 版本与平台行为以官方文档为准。