2012-11-06 72 views
5

由於按下按鈕,我經常需要觸發一系列事件。想想一個+按鈕,增加一個字段:點擊它應該增加1,但點擊&保持應該說每秒增加1,直到按鈕被釋放。另一個例子是在音頻播放器類型的應用程序中按住向後或向前按鈕時的清理功能。實現按住持續事件觸發的優雅方式?

我通常採取以下策略:

  1. touchDownInside我設置了我想要的間隔重複的計時器。
  2. touchUpInside我無效並釋放計時器。

但是對於每個這樣的按鈕,我需要一個單獨的計時器實例變量,以及2個目標動作和2個方法實現。 (這是假設我正在寫一個泛型類,並且不想對同時觸摸的最大數量施加限制)。

有沒有更優雅的方式來解決這個問題,我錯過了?

+2

'UILongPressGestureRecognizer'與從屬的'UITapGestureRecognizer'。就這些。 –

+0

重複:http://stackoverflow.com/questions/9971241/ios-press-and-hold-gesture-tap –

回答

1

通過註冊,每個按鈕的事件:

[button addTarget:self action:@selector(touchDown:withEvent:) forControlEvents:UIControlEventTouchDown]; 
[button addTarget:self action:@selector(touchUpInside:withEvent:) forControlEvents:UIControlEventTouchUpInside]; 

對於每一個按鈕,設置tag屬性:

button.tag = 1; // 2, 3, 4 ... etc 

在處理程序中,做任何你需要的。通過標籤識別按鈕:

- (IBAction) touchDown:(Button *)button withEvent:(UIEvent *) event 
{ 
    NSLog("%d", button.tag); 
} 
2

我建議UILongPressGestureRecognizer

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(addOpenInService:)]; 
    longPress.delegate  = self; 
    longPress.minimumPressDuration = 0.7; 
    [aView addGestureRecognizer:longPress]; 
    [longPress release]; 
    longPress = nil; 

在觸發事件,你可以得到呼叫

- (void) addOpenInService: (UILongPressGestureRecognizer *) objRecognizer 
{ 
    // Do Something 
} 

同樣可以使用UITapGestureRecognizer識別用戶的水龍頭。

希望這會有所幫助。 :)

相關問題