2011-04-27 52 views
2

我有一個UIScrollViewUITapGestureRecognizer這兩個都很基本,並讓他們以我需要的各種方式一起工作,除了一個。 UIScrollView不使用任何縮放,而UITapGestureRecognizer現在只是寫入控制檯。用UIGestureRecognizer中斷滾動/動畫UIScrollView

我可以當UIScrollView被竊聽的UITapGestureRecognizer寫入到控制檯,無論是在靜止時或通過setContentOffset動畫,但我不能讓它當UIScrollView移動由於被刷卡的工作。當UIScrollView被刷卡並且仍在運動中時,刷卡後的第一個敲擊將使其停止移動,然後UITapGestureRecognizer只拾取第二個敲擊。我希望得到第一個水龍頭既可以停止滾動UIScrollView,也可以通過UITapGestureRecognizer寫入控制檯。

我希望我的問題只是通過我的知識UIScrollViewUITapGestureRecognizer的差距,只是一個屬性來解決這個問題,但到目前爲止沒有任何數量的閱讀幫助我解決這個問題。關於這是否可能的任何想法?

編輯:感謝您的建議,請參見下面

道歉,我不認爲我解釋自己很好。我意識到固定UIScrollView上的第一個動作是一個滑動(在我的情況下,只是由UIScrollView順便處理,而不是一個手勢識別器)。

問題是滑動和釋放,如果你點擊而它仍然是在運動(並且沒有其他接觸過程中)後,它不會被UITapGestureRecognizer回升,而是它只會被UIScrollView並停止UIScrollView移動。如果讓它減速然後點擊,這工作正常。另外,如果由於動畫而不是滑動而移動,那麼水龍頭也可以正常工作。

這與使用'UILongPressGestureRecognizer'時是一樣的,這正是我想要的理想使用方式,但是如果我不能用水龍頭來操作它,我就沒有機會了!

回答

4

聽起來像是你需要實現

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

委託方法爲您UITapGestureRecognizer和返回YESUIGestureRecognizers要解釋輕敲姿勢與同步。

e.x.

// Somewhere in your code... 
UIGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init]; 
tap.delegate = self; 
[self.view addGestureRecognizer:tap]; 
[tap release]; 

// And the delegate method... 
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 
     return YES; 
} 

n.b.您可能希望在決定您希望與哪一個UIGestureRecognizer(s)同步時更具歧視性。該示例將與其他每個手勢識別器一起使用。

0

的問題是,當用戶點擊在第一時間滾動UIScrollView,這不是一個抽頭,它是一個滑動。只有當用戶幾乎在相同的位置輕敲和釋放手指時(不用將手指拖過屏幕),它纔會被視爲輕擊。

,你可以做些什麼來解決你的問題是:使用UIScrollView委託方法scrollViewWillBeginDragging,然後當用戶敲擊只是你就會知道,並開始拖動滾動視圖,並添加了UITapGestureRecognizer對於那些真正的水龍頭。