ts-combined-gestures.md 3.4 KB
Newer Older
Z
zengyawen 已提交
1
# 组合手势
Z
zengyawen 已提交
2

3
手势识别组合,即多种手势组合为复合手势,支持连续识别、并行识别和互斥识别。
T
explain  
tianyu 已提交
4

H
geshi  
HelloCrease 已提交
5
>  **说明:**
6
>
Z
zengyawen 已提交
7
> 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
Z
zengyawen 已提交
8

Z
zengyawen 已提交
9 10 11 12 13 14 15 16

## 接口

GestureGroup(mode: GestureMode, ...gesture: GestureType[])

- 参数
  | 参数名 | 参数类型 | 必填 | 默认值 | 参数描述 |
  | -------- | -------- | -------- | -------- | -------- |
S
sienna1128 已提交
17
  | mode | [GestureMode](#gesturemode枚举说明)                                                  | 是 | - | 设置组合手势识别模式。 |
Z
zengyawen 已提交
18 19
  | gesture | [TapGesture](ts-basic-gestures-tapgesture.md)<br/>\|&nbsp;[LongPressGesture](ts-basic-gestures-longpressgesture.md)<br/>\|&nbsp;[PanGesture](ts-basic-gestures-pangesture.md)<br/>\|&nbsp;[PinchGesture](ts-basic-gestures-pinchgesture.md)<br/>\|&nbsp;[RotationGesture](ts-basic-gestures-rotationgesture.md) | 是 | - | 可变长参数,1个或者多个基础手势类型,这些手势会被组合识别。 |

S
sienna1128 已提交
20
## GestureMode枚举说明
T
explain  
tianyu 已提交
21
  | 名称 | 描述 |
Z
zengyawen 已提交
22
  | -------- | -------- |
T
explain  
tianyu 已提交
23 24 25
  | Sequence | 顺序识别,按照手势的注册顺序识别手势,直到所有手势识别成功。当有一个手势识别失败时,所有手势识别失败。 |
  | Parallel | 并发识别,注册的手势同时识别,直到所有手势识别结束,手势识别互相不影响。 |
  | Exclusive | 互斥识别,注册的手势同时识别,若有一个手势识别成功,则结束手势识别。 |
Z
zengyawen 已提交
26 27 28 29


## 事件

T
explain  
tianyu 已提交
30
| 名称 | 功能描述 |
31
| -------- | -------- |
T
explain  
tianyu 已提交
32
| onCancel(event:&nbsp;()&nbsp;=&gt;&nbsp;void) | 顺序组合手势(GestureMode.Sequence)取消后触发回调。 |
Z
zengyawen 已提交
33 34 35


## 示例
Z
zengyawen 已提交
36

H
geshi  
HelloCrease 已提交
37 38
```ts
// xxx.ets
Z
zengyawen 已提交
39 40 41
@Entry
@Component
struct GestureGroupExample {
42 43 44 45 46 47
  @State count: number = 0;
  @State offsetX: number = 0;
  @State offsetY: number = 0;
  @State positionX: number = 0;
  @State positionY: number = 0;
  @State borderStyles: BorderStyle = BorderStyle.Solid;
Z
zengyawen 已提交
48 49

  build() {
50
    Column() {
Z
zengyawen 已提交
51
      Text('sequence gesture\n' + 'LongPress onAction:' + this.count + '\nPanGesture offset:\nX: ' + this.offsetX + '\n' + 'Y: ' + this.offsetY)
52 53 54 55 56 57 58
    }
    .translate({ x: this.offsetX, y: this.offsetY, z: 0 })
    .height(150)
    .width(200)
    .padding(20)
    .margin(20)
    .border({ width: 3, style: this.borderStyles })
Z
zengyawen 已提交
59
    .gesture(
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
      //以下组合手势为顺序识别,当长按手势事件未正常触发时则不会触发拖动手势事件
    GestureGroup(GestureMode.Sequence,
    LongPressGesture({ repeat: true })
      .onAction((event: GestureEvent) => {
        if (event.repeat) {
          this.count++;
        }
        console.info('LongPress onAction');
      })
      .onActionEnd(() => {
        console.info('LongPress end');
      }),
    PanGesture()
      .onActionStart(() => {
        this.borderStyles = BorderStyle.Dashed;
        console.info('pan start');
      })
      .onActionUpdate((event: GestureEvent) => {
        this.offsetX = this.positionX + event.offsetX;
        this.offsetY = this.positionY + event.offsetY;
        console.info('pan update');
      })
      .onActionEnd(() => {
        this.positionX = this.offsetX;
        this.positionY = this.offsetY;
        this.borderStyles = BorderStyle.Solid;
        console.info('pan end');
      })
    )
Z
zengyawen 已提交
89
      .onCancel(() => {
90
        console.info('sequence gesture canceled');
Z
zengyawen 已提交
91 92 93 94 95 96
      })
    )
  }
}
```

Z
zengyawen 已提交
97
![zh-cn_image_0000001174104384](figures/zh-cn_image_0000001174104384.gif)