2010-10-12 65 views
6

我有兩個嵌套的UIScrollViews:父級限於水平分頁,孩子限於垂直滾動。內容是一個可以自由拖拽的大視圖,但會捕捉到三個水平部分之一。嵌套滾動視圖的默認行爲是隻允許一次向一個方向滾動,但我希望允許同時拖動兩個方向以保持操縱單個大視圖的感覺。嵌套的UIScrollViews同時滾動

我的本解決方案涉及分離的垂直滾動視圖的姿勢和它的代表設置爲我的視圖控制器:

for (UIGestureRecognizer *gesture in scrollView.gestureRecognizers) 
    if ([gesture isKindOfClass:[UIPanGestureRecognizer class]]) 
     gesture.delegate = self; 

然後,我實現委託方法,以允許尋呼視圖的手勢來與同時識別滾動視圖的平移手勢:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 
    if (gestureRecognizer.view == scrollView && otherGestureRecognizer.view == pageView) 
     return YES; // allow simultaneous scrolling of pageView and scrollView 

    return NO; 
} 

該解決方案主要是作品,但它偶爾會充當出問題,當我拖動周圍景觀,尤其是當我用鼠標周圍快速移動,或拖動它周圍的過去視圖範圍。具體來說,其中一個滾動視圖會暫時跳回到開始位置,就好像該手勢已被取消一樣,但如果我繼續滾動,則會跳回。

我想知道的是,如果有一種更簡單或更可靠的方法來實現像我一樣忽略的滾動,或者如果有什麼我可以做,以消除這種不良行爲。

+0

我已經做了類似的事情,我想你,它的作品完美。你是否試圖基本上有一個大面積滾動左右不斷地有頂部和左側區域告訴用戶他們在哪裏? – Rudiger 2010-10-12 22:00:01

+0

不完全;我所展示的是一款MMO遊戲中的三種天賦樹。我不想將每棵樹當作一個獨立的頁面,而是希望允許自由地拖動視圖,但是在釋放拖動時讓它鎖定在其中一棵樹上。我見過其他使用類似行爲的應用,特別是顯示該遊戲天賦樹的WoW Armory應用。 – trevorsm 2010-10-12 23:03:11

+0

好的,小姐理解,如果我想到一些東西,我會稍後回顧 – Rudiger 2010-10-12 23:30:57

回答

3

當視圖被拖出內容區域,釋放,然後在滾動視圖反彈之前再次輕敲/拖動視圖時,發生了一些令人不快的行爲。例如,當視圖通過幾次小滑動滾動時,可能會發生這種情況。其中一個滾動視圖會變得混亂,並嘗試在被拖動的同時減速(反彈),導致它在原點和被拖動到的位置之間來回抖動。

我能夠通過反轉滾動視圖的嵌套(垂直滾動視圖內的分頁視圖)並將代理添加到分頁視圖的UIPanGestureRecognizer而不是滾動視圖的手勢來解決此問題。現在它自然滾動,就好像它是一個單一的滾動視圖,同時仍然符合僅在水平方向上的分頁。我不認爲這是爲了讓滾動視圖像這樣被同時滾動滾動,所以我不確定最初的錯誤行爲是由於錯誤導致的,還是僅僅是由於做非預期的事情造成的。

2

剛剛一直在爲此努力,並且因'NSInvalidArgumentException'撞牆,原因是:'UIScrollView的內置平移手勢識別器必須將其滾動視圖作爲它的委託。正如上面的Rythmic Fistman所指出的那樣。

找到辦法解決它......第一子類內的UIScrollView,並使其作爲

然後你在貫徹做的是:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 
return YES; 
} 

看起來工作得很好。

+0

使它成爲......什麼? – 2017-05-25 18:40:36

+0

我幾乎不知道:D – 2017-05-25 19:55:14