Delphi iOS Gesture 事件触发的探索

项目 内容
调试平台 iOS 9.1
工具版本 Embarcadero Delphi Seattle

因在代码中使用了不同的对象事件响应手势动作(特别是多点触控的加入),其间出现了一系列奇怪现象,故有此研究:在TControl对象上的 OnGesture事件与OnMouse系列事件之间触发关系的探索。

多点触控时(igiZoom)各事件之间的触发顺序:

  1. 首先MouseDown事件被触发
  2. OnGesture事件触发,TInteractiveGestureFlag.gfBegin in EventInfo.Flags,EventInfo.GestureID = igiZoom
  3. MouseUP事件触发,参数与MouseDown所带参数一致
  4. 如果Object.InteractiveGestures参数设置了 Pan,Rotate那么在Zoom的同时很有可能会触发带入这两个参数值的事件
  5. 结束时需要注意,TInteractiveGestureFlag.gfEnd 标志并不一定会与TInteractiveGestureFlag.gfBegin成对出现,但一定会有至少一个。也就是说,当多点触控ZOOM结束时,以下三个参数事件可能不会全出现(但至少会出现一个):
    1. TInteractiveGestureFlag.gfEnd+EventInfo.GestureID=igiPan
    2. TInteractiveGestureFlag.gfEnd+EventInfo.GestureID=igiZoom
    3. TInteractiveGestureFlag.gfEnd+EventInfo.GestureID=igiRotate

据此可得出下述2关注点:
- 如果通过MouseUP(或MouseLeave)事件进行关键事务处理的话,需要注意多点触控启动时也会触发该事件!
- 如果通过TInteractiveGestureFlag.gfEnd标志判断手势完成的话,需多加几个事件点比较保险(如Zoom,Pan 都加入该标志的判断),并且要处理对多个gfEnd标志连续传入时的处理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章