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

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

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

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

## 接口

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

- 参数
  | 参数名 | 参数类型 | 必填 | 默认值 | 参数描述 |
  | -------- | -------- | -------- | -------- | -------- |
S
sienna1128 已提交
16
  | mode | [GestureMode](#gesturemode枚举说明)                                                  | 是 | - | 设置组合手势识别模式。 |
Z
zengyawen 已提交
17 18
  | 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 已提交
19
## GestureMode枚举说明
T
explain  
tianyu 已提交
20
  | 名称 | 描述 |
Z
zengyawen 已提交
21
  | -------- | -------- |
T
explain  
tianyu 已提交
22 23 24
  | Sequence | 顺序识别,按照手势的注册顺序识别手势,直到所有手势识别成功。当有一个手势识别失败时,所有手势识别失败。 |
  | Parallel | 并发识别,注册的手势同时识别,直到所有手势识别结束,手势识别互相不影响。 |
  | Exclusive | 互斥识别,注册的手势同时识别,若有一个手势识别成功,则结束手势识别。 |
Z
zengyawen 已提交
25 26 27 28


## 事件

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


## 示例
Z
zengyawen 已提交
35

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

  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.SpaceBetween }) {
      Text('sequence gesture\n' + 'LongPress onAction:' + this.count + '\nPanGesture offset:\nX: ' + this.offsetX + '\n' + 'Y: ' + this.offsetY)
    }.translate({ x: this.offsetX, y: this.offsetY, z: 5 })
G
gmy 已提交
50
    .height(100).width(200).padding(10).margin(80).border({ width: 1, style: this.borderStyles })
Z
zengyawen 已提交
51 52 53 54 55 56 57 58 59 60 61 62
    .gesture(
      GestureGroup(GestureMode.Sequence,
        LongPressGesture({ repeat: true })
          .onAction((event: GestureEvent) => {
            if (event.repeat) {this.count++}
            console.log('LongPress onAction')
          })
          .onActionEnd(() => {
            console.log('LongPress end')
          }),
        PanGesture({})
          .onActionStart(() => {
G
gmy 已提交
63
            this.borderStyles = BorderStyle.Dashed
Z
zengyawen 已提交
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
            console.log('pan start')
          })
          .onActionUpdate((event: GestureEvent) => {
            this.offsetX = event.offsetX
            this.offsetY = event.offsetY
            console.log('pan update')
          })
      )
      .onCancel(() => {
        console.log('sequence gesture canceled')
      })
    )
  }
}
```

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