IOS 應用事件處理方法分析

作者:朱克鋒

郵箱:[email protected]

轉載請註明出處:http://blog.csdn.net/linux_zkf


在一個多點觸摸序列發生的過程中,應用程序會發出一系列事件消息。爲了接收和處理這些消息,響應者對象的類必須至少實現下面這些由UIResponder類聲明的方法之一:
 
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
       
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
       
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
       
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
    
在給定的觸摸階段中,如果發生新的觸摸動作或已有的觸摸動作發生變化,應用程序就會發送這些消息:
    ▪當一個或多個手指觸碰屏幕時,發送touchesBegan:withEvent:消息。
    ▪當一個或多個手指在屏幕上移動時,發送touchesMoved:withEvent:消息。
    ▪當一個或多個手指離開屏幕時,發送touchesEnded:withEvent:消息。
    ▪當觸摸序列被諸如電話呼入這樣的系統事件所取消時,發送touchesCancelled:withEvent:消息。
上面這些方法都和特定的觸摸階段(比如UITouchPhaseBegan)相關聯,該信息存在於UITouch對象的phase屬性聲明中。
每個與事件處理方法相關聯的消息都有兩個參數。第一個參數是一個UITouch對象的集合,表示給定階段中新的或者發生變化的觸摸動作;第二個參數是一個UIEvent對象,表示這個特定的事件。您可以通過這個事件對象得到與之相關聯的所有觸摸對象(allTouches),或者發生在特定的視圖或窗口上的觸摸對象子集。其中的某些觸摸對象表示自上次事件消息以來沒有發生變化,或雖然發生變化但處於不同階段的觸摸動作。
爲了處理給定階段的事件,響應者對象常常從傳入的集合參數中取得一或多個UITouch對象,然後考察這些對象的屬性或取得它們的位置(如果需要處理所有觸摸對象,可以向該NSSet對象發送anyObject消息)。UITouch類中有一個名爲locationInView:的重要方法,如果傳入self參數值,它會給出觸摸動作在響應者座標系統中的位置(假定該響應者是一個UIView對象,且傳入的視圖參數不爲nil)。另外,還有一個與之平行的方法,可以給出觸摸動作之前位置(previousLocationInView:)。UITouch實例的屬性還可以給出發生多少次觸碰(tapCount)、觸摸對象的創建或最後一次變化發生在什麼時間(timestamp)、以及觸摸處於什麼階段(phase)。
響應者類並不是必須實現上面列出的所有三個事件方法。舉例來說,如果它只對手指離開屏幕感興趣,則只需要實現touchesEnded:withEvent:方法就可以了。

在一個多點觸摸序列中,如果響應者在處理事件時創建了某些持久對象,則應該實現touchesCancelled:withEvent:方法,以便當系統取消該序列的時候對其進行清理。多點觸摸序列的取消常常發生在應用程序的事件處理遭到外部事件—比如電話呼入—破壞的時候。



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