2012-04-19 80 views
0

我一直在嘗試實現一個按鈕與兩個不同的觸摸事件。比方說,當用戶點擊按鈕(觸摸很短的時間),它會觸發actionTapped,當用戶長時間觸摸按鈕時會觸發actionTouched。一個按鈕與兩個不同的觸摸事件

This link可能會給出一個想法,但它會使動作重複一遍又一遍。

+0

檢查此[http://stackoverflow.com/questions/4013896/detecting-long-tap-on-iphone](http://stackoverflow.com/ questions/4013896/detected-long-tap-on-iphone) – 2012-04-19 12:35:06

回答

0

好的,這是我的解決方案。 scheduledTimerWithTimeInterval是最小間隔,使得它觸及:

- (IBAction) micButtonTouchedDownAction { 
    self.micButtonTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(micButtonAction:) userInfo:nil repeats:YES]; 
    self.micButtonReleased = FALSE; 
} 

- (IBAction) micButtonTouchedUpInsideAction { 
    self.micButtonReleased = TRUE; 
} 

- (IBAction) micButtonTouchedUpOutsideAction { 
    self.micButtonReleased = TRUE; 
} 

- (void) micButtonAction:(NSTimer *)timer { 
    [self.micButtonTimer invalidate]; 
    self.micButtonTimer = nil; 

    if(self.micButtonReleased) { 
     NSLog(@"Tapped"); 
    } 
    else { 
     NSLog(@"Touched"); 
    } 
} 
1

你會想在touchDown事件上設置一個定時器,它將執行你的longPress函數。在touchUp事件中,您可以取消定時器。真的很簡單。

+0

這是一個好主意,但區分這兩個事件又怎麼樣? – giorashc 2012-04-19 12:38:59

+0

在設置定時器之前,可以在touchDown事件中執行初始(短按)代碼。長按代碼可以在計時器事件中執行。 – cdstamper 2012-04-19 12:41:12

+1

,但您仍然可以同時執行兩項操作(如果定時器關閉...) – giorashc 2012-04-19 12:42:34

0

我將做到以下幾點:

  1. 在您觸摸向下的方法:存儲當前時間(可以稱之爲touchDownTime)。
  2. 在你觸摸了方法:計算time elapsed = current time - touchDownTime

    2.1轉換爲秒

    2.2如果時間流逝>需要時間做動作1(長按),做別的動作2(短觸摸)

1

iOS SDK包含兩個適合您需求的手勢識別器:

  • UIT apGestureRecognizer
  • UILongPressGestureRecognizer

沒有任何動作附加到其創建您的按鈕。然後創建兩個手勢識別器,每個類型中的一個,每個都映射到您想要的動作。然後將手勢識別器附加到按鈕上。

相關問題