头图

在开发的时候遇见一个小需求,就是优先识别双击手势而忽略单击,因为普通的事件会发生混乱,所以我们这个时候就需要一个小技巧就是GestureGroup。

组合手势(GestureGroup)允许开发者在应用中实现复杂的手势识别逻辑。

其中互斥识别模式(Exclusive)是其中的一种模式,它特别适用于需要区分细微差别的手势操作,如单击和双击。这种模式确保在一组手势中,一旦一个手势被识别,其他手势将不再被考虑。这是通过优先级和识别顺序来控制的。在这种模式下,手势组按照定义时的顺序进行检测,一旦一个手势被成功识别,其他手势则自动被忽略。

示例:单击与双击的互斥

若双击手势放置在单击手势之前,系统首先尝试识别双击。如果用户实际执行了双击操作,则在第二次点击时双击手势会被确认,单击手势不会被触发。相反,如果单击手势被放在双击手势之前,那么在用户尚未完成双击的第二次点击前,单击手势可能已被识别,导致双击手势无法被触发。

下面就是一个应用中设置互斥识别模式的一个示例代码片段:

@Entry

@Component

struct TapGestureExample {

    build() {

        Column() {

            Text('Click twice').fontSize(28)

                .gesture(GestureGroup(GestureMode.Exclusive,

                    // 双击放在前面

                    TapGesture({ count: 2 })

                        .onAction((event?: GestureEvent) => {

                            console.log('双击')

                        }),

                    TapGesture({ count: 1 })

                        .onAction((event?: GestureEvent) => {

                            console.log('单击')

                        })

                ))

        }

    }

}

在使用的时候的几点注意事项,

1)在互斥模式下,将具有更多触点或更复杂条件的手势放在前面。

2)考虑实际的用户操作习惯,优化手势响应逻辑,避免用户感觉到操作的不连贯或反应迟缓。

3)在真实设备上多次测试手势识别的准确性和响应速度,根据测试结果调整手势识别的敏感度和顺序。

又解决了一个小问题~!


李游Leo
5.9k 声望1.7k 粉丝

曾在百度、时趣互动、乐视等公司担任过高级前端(软件)开发工程师。后在北京一所当地大学任教,主要职务是教学主任,也为网易云课堂微专业的前端课程负责人。因为本身也是一名IT技术人员,所以非常关注网站制作...