IOS 應用處理單個和多個觸碰手勢分析

作者:朱克鋒

郵箱:[email protected]

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


iPhone應用程序中一個很常見的手勢是觸擊:即用戶用手指觸碰一個對象。響應者對象可以以一種方式響應單擊,而以另外一種方式響應雙擊,甚至可能以第三種方式響應三次觸擊。您可以通過考察UITouch對象的tapCount屬性聲明值來確定用戶在一個響應者對象上的觸擊次數,
取得這個值的最好地方是touchesBegan:withEvent:和touchesEnded:withEvent:方法。在很多情況下,我們更傾向於後者,因爲它與用戶手指離開屏幕的階段相對應。在觸摸結束階段(UITouchPhaseEnded)考察觸擊的次數可以確定手指是真的觸擊,而不是其它動作,比如手指接觸屏幕後拖動的動作。
程序清單展示瞭如何檢測某個視圖上是否發生雙擊。
 
- (void) touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event
       
{
       
    UITouch       *touch = [touches anyObject];
       
    if ([touch tapCount] == 2) {
       
        CGPoint tapPoint = [theTouch locationInView:self];
       
        // Process a double-tap gesture
       
    }
       
}
    
當一個響應者對象希望以不同的方式響應單擊和雙擊事件時,就會出現複雜的情況。舉例來說,單擊的結果可能是選定一個對象,而雙擊則可能是顯示一個編輯視圖,用於編輯被雙擊的對象。那麼,響應者對象如何知道一個單擊不是另一個雙擊的起始部分呢?我們接下來解釋響應者對象如何藉助上文剛剛描述的事件處理方法來處理這種情況:

    1.    在touchesEnded:withEvent:方法中,當觸擊次數爲一時,響應者對象就向自身發送一個performSelector:withObject:afterDelay:消息,其中的選擇器標識由響應者對象實現的、用於處理單擊手勢的方法;第二個參數是一個NSValue或NSDictionary對象,用於保存相關的UITouch對象;時延參數則表示單擊和雙擊手勢之間的合理時間間隔。請注意:使用一個NSValue對象或字典來保存觸摸對象是因爲它們會保持傳入的對象。然而,您自己在進行事件處理時,不應該對UITouch對象進行保持。
 

  2.    在touchesBegan:withEvent:方法中,如果觸擊次數爲二,響應者對象會向自身發送一個cancelPreviousPerformRequestsWithTarget:消息,取消當前被掛起和延期執行的調用。如果觸碰次數不爲二,則在指定的延時之後,先前步驟中由選擇器標識的方法就會被調用,以處理單擊手勢。

    3.    在touchesEnded:withEvent:方法中,如果觸碰次數爲二,響應者會執行處理雙擊手勢的代碼。




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