项目 | 内容 |
---|---|
调试平台 | iOS 9.1 |
工具版本 | Embarcadero Delphi Seattle |
因在代码中使用了不同的对象事件响应手势动作(特别是多点触控的加入),其间出现了一系列奇怪现象,故有此研究:在TControl对象上的 OnGesture事件与OnMouse系列事件之间触发关系的探索。
多点触控时(igiZoom)各事件之间的触发顺序:
- 首先MouseDown事件被触发
- OnGesture事件触发,TInteractiveGestureFlag.gfBegin in EventInfo.Flags,EventInfo.GestureID = igiZoom
- MouseUP事件触发,参数与MouseDown所带参数一致
- 如果Object.InteractiveGestures参数设置了 Pan,Rotate那么在Zoom的同时很有可能会触发带入这两个参数值的事件
- 结束时需要注意,TInteractiveGestureFlag.gfEnd 标志并不一定会与TInteractiveGestureFlag.gfBegin成对出现,但一定会有至少一个。也就是说,当多点触控ZOOM结束时,以下三个参数事件可能不会全出现(但至少会出现一个):
- TInteractiveGestureFlag.gfEnd+EventInfo.GestureID=igiPan
- TInteractiveGestureFlag.gfEnd+EventInfo.GestureID=igiZoom
- TInteractiveGestureFlag.gfEnd+EventInfo.GestureID=igiRotate
据此可得出下述2关注点:
- 如果通过MouseUP(或MouseLeave)事件进行关键事务处理的话,需要注意多点触控启动时也会触发该事件!
- 如果通过TInteractiveGestureFlag.gfEnd标志判断手势完成的话,需多加几个事件点比较保险(如Zoom,Pan 都加入该标志的判断),并且要处理对多个gfEnd标志连续传入时的处理。