IOS 觸控事件

2022-08-03 09:18:12 字數 1320 閱讀 6823

uitouch

uitouch類中包含五個屬性

•window:觸控產生時所處的視窗。由於視窗可能發生變化,當前所在的視窗不一定是最開始的視窗

•view:觸控產生時所處的檢視。由於檢視可能發生變化,當前檢視也不一定時最初的檢視

•timestamp:時間戳記錄了觸控事件產生或變化時的時間,單位是秒

•phase:觸控事件在螢幕上有乙個週期,即觸控開始、觸控點移動、觸控結束,還有中途取消。通過phase可以檢視當前觸控事件在乙個週期中所處的狀態。phase是uitouchphase型別的,是乙個列舉配型,包含:

–uitouchphasebegan(觸控開始)

–uitouchphasemoved(接觸點移動)

–uitouchphasestationary(接觸點無移動)

–uitouchphaseended(觸控結束)

uitouchphasecancelled(觸控取消)

uitouch類中包含兩個成員函式:

•- (cgpoint)locationinview:(uiview *)view:

返回乙個cgpoint型別的值,表示觸控在view這個檢視上的位置,這裡返回的位置是針對view的座標系的。呼叫時傳入的view引數為空的話,返回的時觸控點在整個視窗的位置

•- (cgpoint)previouslocationinview:(uiview *)view:

該方法記錄了前乙個座標值,函式返回也是乙個cgpoint型別的值, 表示觸控在view這個檢視上的位置,這裡返回的位置是針對view的座標系的。呼叫時傳入的view引數為空的話,返回的時觸控點在整個視窗的位置

觸控事件的處理

•當某個uiview發生觸控事件時,系統會將和事件相關的uitouch物件作為引數傳入

••因為可以有多根手指同時觸發同乙個事件,所以傳給檢視的是一組uitouch物件,儲存在nsset中,例如:

如果兩根手指同時觸控某個檢視,那麼touchesbegan:withevent:的第乙個引數是包含兩個uitouch例項的nsset物件

如果這兩根手指一前一後分開觸控同乙個檢視,那麼檢視會收到兩個獨立的touchesbegan:withevent:訊息,並且每個nsset物件中只包含乙個uitouch物件

••因此,根據nsset中uitouch的個數可以判斷出是單點觸控還是多點觸控

觸控事件的傳遞••

•主視窗會呼叫hittest:withevent:方法在檢視繼承樹中找到乙個最合適的子檢視來處理觸控事件,該子檢視即為hit-test檢視

••如果hit-test檢視不處理收到的事件訊息,uikit則將事件**到響應者鏈中的下乙個響應者,看其是否能對該訊息進行處理

iOS觸控事件

在ios開發的觸控事件中包括 1.touchesbegan 觸控開始在一次觸控事件中只會執行一次 void touchesbegan nsset touches withevent uievent event touches是nsset集合,表示事件由幾個手指操作,最多5個 2.touchesmov...

iOS 觸控事件處理

window 觸控產生時所處的視窗。由於視窗可能發生變化,當前所在的視窗不一定是最開始的視窗。view 觸控產生時所處的檢視。由於檢視可能發生變化,當前檢視也不一定時最初的檢視。tapcount 輕擊 tap 操作和滑鼠的單擊操作類似,tapcount表示短時間內輕擊螢幕的次數。因此可以根據tapc...

ios觸控事件二 事件傳遞

了解了uievent以及uitouch之後,那麼事件在ios是如何傳遞的呢?響應者鏈 響應者物件是乙個能夠接收並處理事件的物件。注意在ios中不是任何物件都能處理事件,只有直接或間接繼承了uiresponder的物件才可作為事件的響應者。uiresponder是所有響應者物件的基類。在ios的ui控...