手势

Scripting 提供与 SwiftUI 类似的手势支持,可以为任何视图(如 <VStack><HStack>)添加点击、长按和拖动交互。每种手势都支持灵活的参数配置和回调处理。


onTapGesture

在识别到点击手势时执行指定操作。

类型

1onTapGesture?: (() => void) | {
2  count: number
3  perform: () => void
4}

用法

  • 基本用法(单击):

    1<VStack onTapGesture={() => console.log('点击了')} />
  • 指定点击次数(如双击):

    1<HStack
    2  onTapGesture={{
    3    count: 2,
    4    perform: () => console.log('双击了')
    5  }}
    6/>

默认值

  • count: 1(默认为单击)

onLongPressGesture

在识别到长按手势时执行指定操作。

类型

1onLongPressGesture?: (() => void) | {
2  minDuration?: number
3  maxDuration?: number
4  perform: () => void
5  onPressingChanged?: (state: boolean) => void
6}

用法

  • 简单用法:

    1<VStack onLongPressGesture={() => console.log('长按触发')} />
  • 自定义长按时间和状态监听:

    1<HStack
    2  onLongPressGesture={{
    3    minDuration: 800,
    4    maxDuration: 3000,
    5    perform: () => console.log('长按成功'),
    6    onPressingChanged: isPressing =>
    7      console.log(isPressing ? '正在按压' : '已松开')
    8  }}
    9/>

默认值

  • minDuration: 500 毫秒
  • maxDuration: 10000 毫秒

onDragGesture

为视图添加拖动手势,支持实时变化和拖动结束的回调。

类型

1onDragGesture?: {
2  minDistance?: number
3  coordinateSpace?: 'local' | 'global'
4  onChanged?: (details: DragGestureDetails) => void
5  onEnded?: (details: DragGestureDetails) => void
6}

用法

  • 基本拖动:

    1<VStack
    2  onDragGesture={{
    3    onChanged: details =>
    4      console.log('拖动位置', details.location),
    5    onEnded: details =>
    6      console.log('拖动结束,速度', details.velocity)
    7  }}
    8/>
  • 指定最小拖动距离和全局坐标空间:

    1<HStack
    2  onDragGesture={{
    3    minDistance: 5,
    4    coordinateSpace: 'global',
    5    onChanged: details => {
    6      console.log('当前坐标:', details.location)
    7      console.log('偏移量:', details.translation)
    8    },
    9    onEnded: details => {
    10      console.log('预测结束位置:', details.predictedEndLocation)
    11    }
    12  }}
    13/>

默认值

  • minDistance: 10
  • coordinateSpace: 'local'

DragGestureDetails

onChangedonEnded 回调中传入的拖动信息对象,包含位置、偏移量、速度等信息。

1type DragGestureDetails = {
2  time: number
3  location: Point
4  startLocation: Point
5  translation: Size
6  velocity: Size
7  predictedEndLocation: Point
8  predictedEndTranslation: Size
9}

字段说明

  • time: 当前拖动事件的时间戳(毫秒)
  • location: 当前手指或指针的位置 { x, y }
  • startLocation: 拖动开始的位置
  • translation: 从开始拖动至当前的总偏移量,等同于 location - startLocation
  • velocity: 当前拖动速度 { x, y },单位为每秒点数(points/second)
  • predictedEndLocation: 根据当前速度预测的最终位置
  • predictedEndTranslation: 根据当前速度预测的总偏移量