有四種可能的解決方案
我覺得你的方法是好的
- (void)quantityChanged:(UITapGestureRecognizer *)tapRecognizer {
static NSUInteger numberOfTaps;
if (tapRecognizer.state == UIGestureRecognizerStateEnded) {
numberOfTaps ++;
NSLog(@"web service call with %d",numberOfTaps);
}
}
查看日誌
web service call with 1
web service call with 2
web service call with 3
web service call with 4
或
取出quantityChanged UITapGestureRecognizer後觸發它的一個
我的意思是,從發送對象中刪除UITapGestureRecognizer(該quantityChanged方法中第一個Web服務後)
然後添加UITapGestureRecognizer在您獲得第一次網絡服務響應後再次向發件人發送。
或
使用UILongPressGestureRecognizer。這是一個漫長的事件過程。請檢查事件狀態,其開始,完成等,並編寫您的代碼。
- (IBAction)longPressDetected:(UIGestureRecognizer *)gestureRecognizer {
if (gestureRecognizer.state == UIGestureRecognizerStateBegan){
NSLog(@"Long press began");
} else if (gestureRecognizer.state == UIGestureRecognizerStateRecognized) {
NSLog(@"Long press UIGestureRecognizerStateRecognized");
}
else if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {
NSLog(@"Long press Ended");
}
else {
NSLog(@"Long press detected.");
}
}
或
設置numberOfTapsRequired爲UITapGestureRecognizer
UITapGestureRecognizer *doubleTapRecognizer = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(beginComicTransitions:)] autorelease];
doubleTapRecognizer.numberOfTapsRequired = 2;
doubleTapRecognizer.numberOfTouchesRequired = 1;
doubleTapRecognizer.delegate = self;
聽起來有點像用戶界面的一個奇怪的想法 - 但也許我沒有得到它。你是否想要一個用戶點擊(快速)按鈕,並且如果沒有其他點擊一段時間,它需要點擊的數量,並調用其他方法,並將點擊數作爲參數? – 2012-08-15 06:59:22
是的,問題是我不想在每個水龍頭上進行Web服務調用,但是要計算水龍頭的數量,並在進行Web服務調用時相應地更改數量。 – Cosmin 2012-08-15 07:02:58
@Cosmin我的用例也一樣。我結束了使用performSelector:withObject:afterDelay和cancelPreviousPerformRequestsWithTarget方法 – Shantanu 2014-11-15 08:45:39