SuperAPI AI 工具集

swiftui-gestures

智能体与模型

查看项目

更新于 10-15 21:12

技能介绍

用途:编写、审查和改进 SwiftUI 手势交互,使用现代手势 API 处理组合、状态与冲突。适用 iOS 26+、Swift 6.3。范围边界:本技能负责手势识别、组合、手势状态及手势相关的无障碍替代方案;更广的 SwiftUI 架构与状态归属归 swiftui-patterns,列表、滚动、表单与控件布局归 swiftui-layout-components,UIKit 桥接归 swiftui-uikit-interop。纠正 Apple API 可用性、弃用或行为说法时,需引用相关 Sosumi 或 Apple 官方文档 URL。

主要能力:涵盖 TapGesture(支持 count 多次点击)、LongPressGesture(minimumDuration、maximumDistance)、DragGesture(Value 含 startLocation、location、translation、velocity、predictedEndTranslation)、MagnifyGesture(iOS 17+,替代已弃用的 MagnificationGesture)、RotateGesture(iOS 17+,RotationGesture 的新替代)、SpatialTapGesture(iOS 16+),以及手势组合与添加方式。离散手势只触发一次(.onEnded),连续手势持续输出(.onChanged、.onEnded、.updating)。

组合方式:.simultaneously(with:) 同时识别,值为 SimultaneousGesture.Value(.first/.second);.sequenced(before:) 前者成功后才开始后者;.exclusively(before:) 只一个成功,前者优先。@GestureState 在手势结束时自动复位,适合瞬时反馈;需持久保留的值用 @State。添加手势的优先级修饰符:.gesture() 低于视图或子视图已有手势;.highPriorityGesture() 优先;.simultaneousGesture() 同等优先级。.gesture(_:including:) 用 GestureMask 控制 .gesture、.subviews、.all、.none。可实现 Gesture 协议自定义手势,映射自定义值需返回 AnyGesture<Value>。

必要用法与限制:长按反馈用 .updating() 配合 @GestureState;持久缩放/旋转在 onEnded 中做合理边界钳制;onChanged 保持轻量,避免每帧重计算;普通单击操作应使用 Button 而非 onTapGesture,后者缺少无障碍特征、VoiceOver 角色、语音控制定位、开关控制扫描与键盘激活;onTapGesture 仅用于多次点击(count 2+)、依赖点击位置或坐标空间的场景。常见错误包括误判父子手势优先级、用 @State 而非 @GestureState 保存瞬时状态、iOS 17+ 仍用已弃用类型、在 onChanged 中做重计算。评审清单与更多示例(拖拽排序、捏合缩放、旋转加缩放组合、速度/投影、序列状态机、UIKit 互操作)见 references/gesture-patterns.md。资料未提供安装命令、收费与平台支持范围等信息。