Привязывая различные события жестов к каждому компоненту и разрабатывая метод ответа на событие, в случае успешного распознавания жестов платформа 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)。
PriorGesture — это метод привязки приоритетных жестов, который может привязывать жесты распознавания приоритета к компонентам.
По умолчанию, когда родительский компонент и дочерний компонент используют жест для привязки жеста одного и того же типа, дочерний компонент отдает приоритет распознаванию жеста, связанного с помощью жеста. Когда родительский компонент использует 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 — это метод привязки параллельных жестов, который может привязывать один и тот же жест, который может реагировать одновременно на родительский и дочерний компоненты.
По умолчанию события жестов не являются всплывающими событиями. Если один и тот же жест привязан к родительско-дочернему компоненту, события жестов, привязанные к родительско-дочернему компоненту, будут конкурировать. Максимум только одно событие жеста компонента может получить ответ. Когда родительский компонент привязан к параллельному жесту 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)
}
}
Примечание. Если родительский и дочерний компоненты привязаны как к событию жеста щелчка, так и к событию жеста двойного щелчка, и родительский компонент, и дочерний компонент будут реагировать только на событие жеста щелчка.