2012-09-07 168 views
0

我有一個UIScrollView,我正在實現viewForZoomingInScrollView:委託方法,該方法返回用戶可以縮放和平移的UIImage。我也有一些UIButtons作爲UIScrollView的子視圖,我用它作爲註釋,如Google Maps。使用UIButtons捕捉觸摸的Zoomable UIScrollView

我遇到的問題是,當放大右鍵時,很多UIImage可能被UIButtons遮擋。當試圖縮放時,UIButtons正在接收觸摸事件,而縮放沒有發生。你最終不得不小心地將手指放在空曠的地方放大。

我注意到當有很多註釋視圖時,Google地圖應用程序似乎可以正常工作,但仍然可以捏。

我想我需要優先接觸,UIScrollView需要響應捏和平底鍋,而按鈕只是輕拍。

任何人都有這方面的經驗?

回答

0

試試這個

UIGestureRecognizer* tapRecognizer = nil;  
for (UIGestureRecognizer* recognizer in yourButton) { 
    if (![recognizer isKindOfClass:[UITapGestureRecognizer class]]) { 
     [yourButton removeGestureRecognizer:recognizer]; 
     break; 
    } 
} 

所以你從UITapGestureRecognizer

0

不同的按鈕,刪除所有的手勢識別來看看的UIView的hitTest:withEvent:method。在該方法內,你需要檢查你想返回哪個視圖。你迴歸的觀點將成爲接受這一點的人。例如,您可以繼承該按鈕並覆蓋該方法,以針對您的特定場景返回ImageView

1

我有這個確切的問題,它有點奇怪。這不是由於按鈕上有任何手勢識別器,它是由於某種原因被轉發到UIButton的UIScrollView的捏手勢識別器。此外,UIButton響應某些UIGestureRecognizerDelegate調用(如-gestureRecognizerShouldBegin :)但不是其他人(如-gestureRecognizer:shouldReceiveTouch :)。這就像UIScrollView有選擇性地將一些委託調用轉發給UIButton,有些不是。

我終於找到了一個非常簡單的方法來解決這個問題:

yourScrollView.pinchGestureRecognizer.delaysTouchesBegan = YES; 
yourScrollView.pinchGestureRecognizer.delaysTouchesEnded = YES; 

幸運的是,在UIScrollView的默認縮放手勢識別器可公開訪問,並且兩個delaysTouches屬性默認情況下是NO。當您將它們設置爲YES時,如果手勢識別器可能或者確實意識到捏手勢,即使它在UIButton的頂部開始,它也不會將這些觸摸轉發到UIButton,並且UIButtons不會再幹擾UIScrollView的縮放。

0

我以不同的方式解決了這個問題,但這可能不是你的情況。 我的按鈕被添加到圖像視圖中,圖像視圖被自己添加到另一個容器視圖。在:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 

...方法,我返回圖像視圖 - 壞。更改爲在層次結構中返回我第一個容器視圖修復了觸摸。