2012-06-13 62 views
2

我有一個UIScrollView在另一UIScrollView。外層滾動視圖處理分頁,內層滾動視圖處理縮放(這是一個支持縮放的圖像庫)。我需要內部滾動視圖忽略單個觸摸,以便它們轉到外部滾動視圖。如何讓UIScrollView忽略單個觸摸?

這可以使用[innerScrollView setUserInteractionEnabled:NO]完成,但顯然也會關閉內部滾動視圖上的捏和平移手勢。有沒有辦法保持由內部縮放視圖處理的捏和平移手勢,並將所有其他事件轉發到響應者鏈?

PS。我總是可以帶着一些代表團黑客來解決這個問題。我想知道是否有一種簡單的方法可以使用常規響應鏈來運行它。

回答

2

我發現了什麼:單擊事件最終會在內滾動視圖內的內容視圖中變爲touchesBegan:withEvent:。此內容視圖不實現該方法,默認的UIView實現將事件傳遞給響應者鏈。這裏我們有內滾動視圖,其中確實是實現touchesBegan:withEvent:。這種實現吞噬了單擊,沒有任何東西在響應者鏈上。什麼幫助是繼承UIScrollView和手動發送觸摸起來響應鏈:

- (void) touchesBegan: (NSSet*) touches withEvent: (UIEvent*) event 
{ 
    [[self nextResponder] touchesBegan:touches withEvent:event]; 
} 

當然這也很好地轉發至少touchesEnded:withEvent:這種方式。這做我需要的一切。內滾動視圖可以處理縮放和平移,外滾動視圖接收單擊事件。我甚至可以放大,然後平移到右側,然後轉到下一頁。

+0

好問題和很好的答案。我正在使用這個在UITableViewCell中添加一個'UIScrollView'來模擬「滑動操作」。我需要忽略scrollView上的tap事件,並將它們轉發給單元格本身,以保持tableSell的選擇與'didSelectRowAtIndex'工作。 – yonel

1

在iOS 5上,UIScrollViews公開他們的panGestureRecognizerpinchGestureRecognizer

因此,如果您不需要支持較舊的iOS版本,則可以嘗試innerScrollView.panGestureRecognizer.minimumNumberOfTouches = 2

編輯:這是行不通的; scrollView仍然吞噬了觸摸。我會留下這裏作進一步參考。

如果你不希望內部的scrollView處理所有的panning,你可能可能(我沒有嘗試過)只是刪除它的panGestureRecognizer。

+0

我想要它來處理平移,甚至用單個手指平移。我只是不希望它響應單點觸摸事件,吞下它們。即使在提高了平移手勢識別器上的最小觸摸次數之後,它也能做到這一點。 – zoul

+0

單手指不是平移單觸事件嗎?恐怕我似乎誤解了你。順便說一句,如果你提出了一個好的解決方案,我會有興趣聽到它。我發現ScrollView黑客奇怪地迷人。 – fzwo

+0

@zoul另外,從用戶界面的角度來看,您如何處理水平平移和分頁?平鋪直到結束,然後頁面? – fzwo