2010-03-21 50 views
5

這是我一直在努力的一個棘手的iPhone問題。我在頁面上有三個UIScrollView,一個只能水平滾動,一個只能垂直滾動,一個可以水平和垂直滾動。我想一起鎖定視圖,以便水平滾動視圖的水平位置與主滾動視圖的水平位置以及垂直滾動視圖相匹配,以便拖動主滾動視圖可控制水平滾動視圖和垂直滾動視圖。連接兩個UIScrollView的在一起

問題是,我完全難倒了。我在蘋果文檔裏面瀏覽過,但似乎沒有辦法正式做到這一點。我以爲有一種想法是以某種方式將任何滾動視圖的任何接觸「克隆」到另外兩個點上,但我不知道如何去做。如果有人對此有任何想法,我會非常感激。

編輯:我試着建議子類化UIScrollView和覆蓋touchesMoved調用touchesMoved在其他滾動視圖。不幸的是,touchesMoved並沒有被要求進行滾動動作,因爲UIScrollView以某種方式截取了這些動作並使用它們來控制它的滾動。我開始尋找更低級別的東西,並找到核心動畫滾動層,但理想情況下,我不想從頭開始重新創建UIScrollView。仍試圖找出這一個。

回答

11

我認爲最簡單的方法是將一個委託添加到您的scrollviews其實現方法如下:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 

然後,您可以檢查contentOffset以檢查滾動視圖實際滾動的次數,並相應地更新主滾動視圖。

+0

真棒,這完美的作品。我現在覺得有點笨,但是謝謝你讓我直立。 – johnw188 2010-03-24 20:36:15

+0

我驚呆了這個實際工作的無縫。我想到了它,但預計反彈等不會反映出來,它看起來很狡猾。這是完美的。謝謝馬丁! – 2011-04-06 10:51:36

0

您需要爲屏幕上的所有三種用途擴展UIScrollView,並覆蓋touchesMoved:withEvent:方法來調用其他的方法(確保不會以循環代碼結束再次調用自身!)。

因此,例如在雙向滾動項目的代碼可以在此基礎上:通過使用一些額外的變量

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [horizontalScrollview touchesMoved:touches withEvent:event]; 
    [verticalScrollview touchesMoved:touches withEvent:event]; 
} 

(如ControllerLastTouched),您可以檢查調用其他兩個touchesMoved之前: withEvent:方法。

這將使你做的「克隆」你在談論...

+0

嘿,所以我認爲這是我正在尋找的東西,但事實證明東西比我想象的要複雜一點。當我設置這個安排時,對UIScrollView中包含的視圖的任何接觸都會被拾取,但是滾動動作本身不稱爲touchesMoved。我很確定這是由於UIScrollView的工作原理 - 它們在手指着陸時啓動計時器,並且如果用戶在一段時間內滾動,則開始滾動動作,否則將觸摸傳遞給觸摸處理方法的看法。 – johnw188 2010-03-24 18:15:15

相關問題