簡體   English   中英

什么時候“手指”事件作為手勢發送到UIGestureRecognizer與touchesBegan / touches已移動/ touches結束到UIView

[英]When do “finger” events get sent as Gestures to UIGestureRecognizer vs touchesBegan/touchesMoved/touchesEnded to UIView

我來自macOS / Cocoa和Mouse Events,我想了解一下這些“ Finger”(我自己的名字)事件


我的問題是:

UIView上發生“手指”事件時(稱為MyView ),何時將其作為Gesture發送到MyView上的UIGestureRecognizer上,何時將其作為touchesBegan/touchesMoved/touchesEnded發送到MyView


我搜索了所有可能想到的查詢,但實際上只找到了一些不錯的信息來源,但沒有任何信息可以完全滿足我的需求

touchesBegan,touchesEnded,touchesMoved用於移動UIView

UIGesture識別器vs觸摸開始/觸摸已移動/觸摸已結束(准確性)

我現在最好的猜測是touchBegan / touchMoved / touchEnded和手勢識別器之間的區別取決於手指的速度嗎?

因此,如果您點擊並緩慢移動,則基礎UIView接收touchMoved事件。 如果您快速點擊並拖動,將創建一個手勢並將其傳遞到基礎UIView的GestureRecognizer

我目前的猜測是,當手指按下時,事件運行循環會檢測到該手指,並觸發touchesBegan 當您四處移動手指時,它會觸發touchesMoved
但是,如果您移動得足夠快,或者運行時認為您正在做出手勢,則它會創建一個Gesture並將消息發送到UIGestureRecognizer ,而不是發送touchesMoved

我目前正在嘗試檢驗該假設,但是這很繁瑣,而且我沒有一個非常好的示例項目可以進行測試,因此我認為如果可能的話,我會眾包一些見識。 如果我自己也解決的話,我會報告

它很復雜(或可以是),但是基本規則很簡單。 [有關其他詳細信息,請參閱我的書 。]

手指是包裹在UIEvent中以進行傳遞的UITouch。 交付開始觸摸,觸摸移動,觸摸移動...觸摸結束/取消,此時手指不再在那里。

為觸摸(手指)的出現,在初始UITouch /的UIEvent(觸摸開始)被發送到這兩個視圖及其手勢識別(一個或多個) 任何手勢識別越往上視圖層次結構。 這樣,觸摸就可以正常傳遞到視圖,並且手勢識別器可以同時考慮手勢。

這種情況不斷重復發生(觸摸已移動),直到觸摸被解除(觸摸結束)或手勢識別器之一可以識別為止。 在后一種情況下,所有其他grs都被迫失敗,觸摸被取消顯示,只有可識別的gr才能繼續進行其余的觸摸。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM