各コンポーネントに異なるジェスチャ イベントをバインドし、イベントの応答メソッドを設計することで、ジェスチャ認識が成功すると、ArkUI フレームワークはイベント コールバックを通じてジェスチャ認識の結果をコンポーネントに通知します。
1. ジェスチャー(従来のジェスチャー結合方法)
..gesture(gesture: GestureType, mask?: GestureMask)
ジェスチャは、ジェスチャを対応するコンポーネントにバインドできるユニバーサル ジェスチャ バインディング メソッドです。
たとえば、ジェスチャ ジェスチャ バインディング メソッドを使用して、タップ ジェスチャ TapGesture を Text コンポーネントにバインドできます。
// xxx.ets
@Entry
@Component
struct Index {
build() {
Column() {
Text('Gesture').fontSize(28)
// 采用gesture手势绑定方法绑定TapGesture
.gesture(
TapGesture()
.onAction(() => {
console.info('TapGesture is onAction');
}))
}
.height(200)
.width(250)
}
}
2. priorityGesture (優先度付きジェスチャ バインド メソッド)
undefined..priorityGesture(gesture: GestureType, mask?: GestureMask)。
priorityGesture は、優先認識ジェスチャをコンポーネントにバインドできる優先ジェスチャ バインディング メソッドです。
デフォルトでは、親コンポーネントと子コンポーネントがジェスチャを使用して同じ種類のジェスチャをバインドする場合、子コンポーネントはジェスチャを通じてバインドされたジェスチャの認識を優先します。親コンポーネントが priorityGesture を使用して子コンポーネントと同じタイプのジェスチャをバインドする場合、親コンポーネントは priorityGesture によってバインドされたジェスチャの認識を優先します。
たとえば、親コンポーネント Column と子コンポーネント Text が同時に TapGesture ジェスチャにバインドされており、親コンポーネントが優先ジェスチャ priorityGesture の形式でバインドされている場合、親コンポーネントにバインドされている TapGesture が応答します。初め。
// xxx.ets
@Entry
@Component
struct Index {
build() {
Column() {
Text('Gesture').fontSize(28)
.gesture(
TapGesture()
.onAction(() => {
console.info('Text TapGesture is onAction');
}))
}
.height(200)
.width(250)
// 设置为priorityGesture时,点击文本区域会忽略Text组件的TapGesture手势事件,优先响应父组件Column的TapGesture手势事件
.priorityGesture(
TapGesture()
.onAction(() => {
console.info('Column TapGesture is onAction');
}), GestureMask.IgnoreInternal)
}
}
3.ParallelGesture (並列ジェスチャ バインディング メソッド)
...ParallelGesture(gesture: GestureType, Mask?: GestureMask)
ParallelGesture は、親コンポーネントと子コンポーネントに同時に応答できる同じジェスチャをバインドできる並列ジェスチャ バインディング メソッドです。
デフォルトでは、ジェスチャ イベントは非バブリング イベントです。同じジェスチャが親子コンポーネントにバインドされている場合、その親子コンポーネントにバインドされているジェスチャ イベントが競合します。最大でも 1 つのコンポーネントのジェスチャ イベントのみが応答を受け取ることができます。親コンポーネントが平行ジェスチャーParallelGestureにバインドされている場合、親コンポーネントと子コンポーネントの同じジェスチャー イベントをトリガーして、同様のバブリング効果を実現できます。
// xxx.ets
@Entry
@Component
struct Index {
build() {
Column() {
Text('Gesture').fontSize(28)
.gesture(
TapGesture()
.onAction(() => {
console.info('Text TapGesture is onAction');
}))
}
.height(200)
.width(250)
// 设置为parallelGesture时,点击文本区域会同时响应父组件Column和子组件Text的TapGesture手势事件
.parallelGesture(
TapGesture()
.onAction(() => {
console.info('Column TapGesture is onAction');
}), GestureMask.IgnoreInternal)
}
}
注: 親コンポーネントと子コンポーネントがクリック ジェスチャ イベントとダブルクリック ジェスチャ イベントの両方にバインドされている場合、親コンポーネントと子コンポーネントは両方ともクリック ジェスチャ イベントにのみ応答します。