2011-06-16 68 views
1

我想使用UIGestureRecognizers來區分兩種手勢:那些在mini-UIView中出現的手勢和視圖中其他任何地方出現的手勢。識別不在某個子視圖中的手勢

我想我可以用兩個使用requireGestureRecognizerToFail的GestureRecognizer來完成這個任務。但是,父視圖的GestureRecognizer從不會觸發。爲什麼是這樣?

這是一個示範性的測試案例:

-(void)viewDidLoad { 

    UIView *miniView = [[[UIView alloc] initWithFrame:CGRectMake(100,100,20,20)] autorelease]; 
    miniView.backgroundColor = [UIColor redColor]; 
    [self.view addSubview:miniView]; 

    // triggered when you tap the miniView 
    UITapGestureRecognizer *miniTap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(miniTap:)] autorelease]; 
    [miniView addGestureRecognizer:miniTap]; 

    // expected: triggered when you tap anywhere outside the mini-view 
    // actual: never triggered! 
    UITapGestureRecognizer *nonMiniTap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(nonMiniTap:)] autorelease]; 
    [nonMiniTap requireGestureRecognizerToFail:miniTap]; 
    [self.view addGestureRecognizer:nonMiniTap]; 


    [super viewDidLoad]; 
} 


-(void)miniTap:(id)sender { NSLog(@"miniTap"); } 

-(void)nonMiniTap:(id)sender { NSLog(@"nonMiniTap"); } 

爲什麼requireGestureRecognizerToFail:防止nonMiniTap從不斷被觸發?我能否以預期的方式行事?

+0

視圖層次結構中所有對象的userInteractionEnabled狀態是什麼? – 2011-06-16 23:43:19

回答

2

如果你看到requireGestureRecognizerToFail:的文檔,它明確宣稱手勢的狀態沒有從UIGestureRecognizerStatePossible改變,直到其他姿勢過渡到UIGestureRecognizerStateFailedUIGestureRecognizerStateRecognized。但是由於miniTap手勢不會移出默認的UIGestureRecognizerStatePossible狀態,因爲觸摸不在其視圖中,因此nonMiniTap手勢無法識別。所以你在父視圖上的敲擊失敗。

因此不需要依賴關係。您可以關閉該線路,並且應該按照您的要求工作。