2011-11-28 105 views
1

我想確定在UIScrollView的視圖內的單個選項卡。問題是UIScrollview捕捉所有的手勢。UIScrollView決定拖動和水龍頭

我試過到目前爲止: 我重寫我的UIScrollView下面的方法:

-(BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view 
{ 
    UITouch *touch = [touches anyObject]; 
    if([touch tapCount]== 2) return YES; 

    return NO; 
} 

這工作得很好,現在我可以在我的UIView達到UITapGestureRecognize,可惜我只能檢測雙水龍頭,因爲[touch tapCount] == 1總是被調用(拖動或放大UIScrollView)。但實際上UIScrollview不需要「單抽頭功能」

有沒有辦法在這種方法內的拖動(滾動或縮放)和單個Tap之間進行判斷?我不能找到它..提前

-(BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view 

感謝 沒法比

回答

6

這聽起來像你只想輕敲識別器成功,如果觸摸不滾動滾動視圖。這很容易,因爲滾動視圖使用平移手勢識別器進行滾動。在iOS 5,你可以這樣做:如果你想支持舊版iOS

[self.tapRecognizer requireGestureRecognizerToFail:self.scrollView.panGestureRecognizer]; 

,你必須這樣做:

for (UIGestureRecognizer *recognizer in self.scrollView.gestureRecognizers) { 
    if ([recognizer isKindOfClass:[UIPanGestureRecognizer class]]) 
     [self.tapRecognizer requireGestureRecognizerToFail:recognizer]; 
+0

我在ios4上的這段代碼有問題。 我用我自己的panrecognizer在uiscrollview上捕獲手勢: pan.delaysTouchesBegan = YES; pan.delaysTouchesEnded = NO; 此設置適用於ios5。 當我的手勢識別器委託在shouldReceiveTouch方法中返回YES時,滾動手勢未使用scrollViewDidScroll調用任何更改。 –

0

touchesShouldBegin:是UIView的委託方法。它不是UIGestureRecognizer的一部分。

您需要創建一個UITapGestureRecognizer,設置您想要觸發識別器的點擊數並將其添加到您的視圖中。

Here is the documentation for UITapGestureRecognizer

+0

蘭德爾您好,感謝您的answere。沒有touchesShouldBegin不是UIView的委託,它從UIScrollView繼承http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIScrollView_Class/Reference/UIScrollView.html當然,我創建了UIGestureRecognizer。但問題是我擁有UITapGestureRecognizer的UIView位於UIScrollView的內部,並且ScrollView捕獲所有的手勢。重寫方法touchesShouldBegin可以抓住手勢並將其提供給我的UIView。但是,我怎樣才能決定拖動和水龍頭? – Fabi

+0

沒有其他建議? – Fabi

0

我假設你的意思是「一個水龍頭」 - 你的滾動視圖屬於UIView的與您的控制器。將輕擊手勢識別器分配給該UIView。它首先挑選所有手勢,然後傳遞給它不感興趣的手勢。