前言:
ACE全称是Ability Cross-platform Environment (元能力跨平台执行环境),是应用在OpenHarmony上的UI框架。作为一个UI框架,需要提供视图布局,UI组件,事件响应机制等的支持,并且当前主流的应用终端都为触摸屏,UI的操作大都通过手势完成,我们这里就对ACE框架的手势处理做一个简单的分析。
手势分类:
从OpenHarmony开发者网站提供的API上我们可以看到,在基于TS扩展的开发范式说明里,单独对手势做了一个类别,而在基于JS扩展的开发范式说明里,则是归类到通用事件里,名称也略有不同:
代码结构与简单类图:
代码结构:
./ace/ace\_engine/core
|-- gesture #gesture主文件夹,定义了各种手势的具体实现类与对应的Recongnizer
| |-- include
| |-- src
|-- components #组件文件夹
| |-- gesture\_listenser #对触摸目标对象做一些处理,注册Recongnizer等。
gesture文件夹下的类图:
这里仅对gesture文件下的文件做一个类图梳理,可以很清晰的看到Gesture类和Recongnizer类的对应关系,其中Gesture类会创建一个对应的Recongnizer,并set对应相关的OnActionID,priority和Mask,而Recongnizer类则是处理手势相关的事件逻辑等。
手势简单代码流程:
我们以Pinch为例,当应用调用相关接口后,JS进行Binding操作:
JSClass\<JSPinchGesture\>::Declare("PinchGesture");
JSClass\<JSPinchGesture\>::StaticMethod("create", &JSPinchGesture::Create, opt);
JSClass\<JSPinchGesture\>::StaticMethod("pop", &JSGesture::Pop);
JSClass\<JSPinchGesture\>::StaticMethod("onActionStart", &JSGesture::JsHandlerOnActionStart);
JSClass\<JSPinchGesture\>::StaticMethod("onActionUpdate", &JSGesture::JsHandlerOnActionUpdate);
JSClass\<JSPinchGesture\>::StaticMethod("onActionEnd", &JSGesture::JsHandlerOnActionEnd);
JSClass\<JSPinchGesture\>::StaticMethod("onActionCancel", &JSGesture::JsHandlerOnActionCancel);
JSClass\<JSPinchGesture\>::Bind(globalObj);
Create函数里面会创建一个Gesture实例,并将其push到gestureComponent中:
void JSPinchGes