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標誌連續傳入時的處理。

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