ts-combined-gestures.md 3.1 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

## 权限列表
Z
zengyawen 已提交
10 11


Z
zengyawen 已提交
12

Z
zengyawen 已提交
13 14 15 16 17 18 19 20 21 22 23 24

## 接口

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

- 参数
  | 参数名 | 参数类型 | 必填 | 默认值 | 参数描述 |
  | -------- | -------- | -------- | -------- | -------- |
  | mode | GestureMode                                                  | 是 | - | 设置组合手势识别模式。 |
  | 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个或者多个基础手势类型,这些手势会被组合识别。 |

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


## 事件

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


## 示例
Z
zengyawen 已提交
40

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

  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 已提交
55
    .height(100).width(200).padding(10).margin(80).border({ width: 1, style: this.borderStyles })
Z
zengyawen 已提交
56 57 58 59 60 61 62 63 64 65 66 67
    .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 已提交
68
            this.borderStyles = BorderStyle.Dashed
Z
zengyawen 已提交
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
            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 已提交
85
![zh-cn_image_0000001174104384](figures/zh-cn_image_0000001174104384.gif)