項目 | 內容 |
---|---|
調試平臺 | 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標誌連續傳入時的處理。