2012-02-07 45 views
0

Im被UIGestureRecognizerDelegate協議中的方法略微混淆。當我實現下面的委託方法時,我似乎永遠不會讓我的UITapGestureRecognizers發送到此方法,其狀態爲UIGestureRecognizerStateRecognized。他們總是在UIGestureRecognizerStatePossible狀態。這是正確的嗎?UIGestureRecognizerDelegate從來沒有顯示水龍頭,因爲在'認可'狀態

下面是測試代碼,我設置用我輕敲手勢和我的測試實現的委託方法:

UITapGestureRecognizer *singelTap = [[UITapGestureRecognizer alloc] initWithTarget:nil action:nil];  
singelTap.numberOfTapsRequired = 1; 
singelTap.delegate = self; 
[self.view addGestureRecognizer:singelTap]; 

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
     int i = 0; 

     if(gestureRecognizer.state == UIGestureRecognizerStateBegan){ 
      i=1; 
     } 
     if(gestureRecognizer.state == ..... //testing for all possible states... 


return YES; 
} 

回答

0

在文件

這種方法被稱爲前的touchesBegan發現這個。

所以我想觸摸只能處於'可能'狀態。

1

UIGestureRecognizerDelegate協議僅僅是微調手勢識別的行爲。事件的實際識別是通過設定目標和選擇完成:

UITapGestureRecognizer *gr = [[[UITapGestureRecognizer alloc] 
      initWithTarget:self action:@selector(handleTap:)] autorelease]; 

// add gr to a view 


-(void)handleTap:(UITapGestureRecognizer*)tg 
{ 
    if (tg.state != UIGestureRecognizerStateRecognized) return; 
    NSLog(@"tap recognized"); 
} 

在大多數情況下,你可以安全地忽略UIGestureRecognizerDelegate協議。

+0

是的,我知道。但我的理解是,手勢在每個狀態變化時都被髮送到委託方法。那麼情況並非如此? – 2012-02-07 23:32:27

+0

不需要。如果您只是要求識別一次敲擊,則不需要在「UIGestureRecognizerStatePossible」以外的任何其他狀態中調用委託方法。請解釋你認爲應該調用的委託方法,以及爲什麼。 – mvds 2012-02-07 23:36:44

+0

我需要決定是否要對基於UITouch的TapGesture做出反應,即如果它是在特定的子視圖上,則允許該手勢,否則不允許。問題在於,在識別出其他幾個水龍頭和手勢的情況下,我只希望一旦識別出該手勢。如果我使用'handlesTap'方法,我將失去UITouch中包含的信息。 – 2012-02-07 23:43:49

4

這是正確的。當你實現了

(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

方法,你會得到一個機會來決定是否UIGestureRecognizer 應該接收觸摸。這意味着它還沒有收到觸摸。由於UIGestureRecognizer尚未收到與該特定觸摸有關的任何內容,因此尚未能確定它是否識別它;因此在此方法期間它保持在狀態UIGestureRecognizerStatePossible

如果您從該方法返回YES,觸摸將發送到UIGestureRecognizer。

只有這樣UIGestureRecognizer才能處理觸摸。 withEvent:方法:被稱爲在手勢識別爲一個新的觸摸

+0

請記住,如果您從上述方法返回YES,您並不是說UIGestureRecognizer必須識別該觸摸,而只是說該觸摸對於該UIGestureRecognizer是有效的觸摸。之後,您的所有UIGestureRecognizers將能夠確定哪一個應該轉換到狀態UIGestureRecognizerStateRecognized。 – roff 2012-02-08 00:04:24

相關問題