2014-03-05 109 views
0

如果我有一個UIScrollView在一個UIScrollView,但我只想所包含的滾動視圖,以收到的事件和工作時偏移父滾動視圖Y是0在滾動一個UIScrollView一個UIScrollView

怎樣才能實現呢?

警告我沒有提到,使用self.ptViewController.collectionView.userInteractionEnabled = YES;

沒有幫助,因爲事件沒有開始傳遞到滾動視圖,直到用戶釋放他們的手指,大概是由於FirstResponder中的更改。

回答

0

因此,在嘗試其他建議後,我發現我無法複製所需的流暢性,無縫滾動,就好像它是一張桌子一樣。

這麼長的故事,滾動視圖中的滾動視圖可能是一個壞主意,如果您不希望用戶在兩個滾動屏幕之間時將手指從屏幕上移開。

因此,不要打擾,請使用UICollectionView並精確定義應該如何處理每個節/頁眉/頁腳/行單元格。

所以我所做的只是在Collection Flow Layout中添加必要的屬性更改,以確保正確處理所有部分和單元格。

由於我試圖實現流佈局的性質,需要大量的數學和代碼來確保處理所有約束。

0
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView //Or – scrollViewDidScroll: 
{ 
    if (scrollView==scrollViewA && scrollViewA.contentOffset.y == 0) 
    { 
      scrollViewB.userInteractionEnabled = YES; 
    } 
} 
+0

也許應該在父級滾動時禁用子級scrollView上的userInteraction?爲了避免衝突? – Jissay

+0

這兩個答案的工作原理除了一個簡單的事實,這意味着我必須將手指從屏幕上取下,然後再次按下它以開始在其他UIScrollView中滾動。 本質上,當userInteractionEnabled變爲YES時,UI停止工作,直到我再次開啓/關閉手指。 –

+0

@DavidvanDugteren如果你不想擡起你的手指,你可以很容易地使用' - scrollViewDidScroll:'。 – Segev

0

據我所知,你不能在不同的scrollviews之間傳輸的第一反應,所以你就不必把你的手指,然後重新打開。

但是你可以做別的事情:

一旦你在你父母滾動視圖達到Y = 0點,然後你可以使用touchesMoved事件以編程方式滾動鼠標滾動視圖包含。

基本上,你會做一個命中測試,以確保觸摸是在包含scrollView,檢查容器scrollView contentOffset y位置是0,然後滾動你的容器scrollView。

喜歡的東西:

- (void) touchesMoved: (NSSet *)touches withEvent:(UIEvent *)event 
{ 
    if (scrollViewContainer.contentOffset.y == 0) 
    { 
     if ([self hitTest:[[touches anyObject] locationInView:containedScrollView] withEvent:nil]) 
     { 
      //programatically scroll your contained scrollView 
     } 
    } 
} 

這段代碼僅僅是一個樣品,以便更好地理解我的意思。你應該根據自己的需要進行調整。

+0

好吧,這是有道理的,但我不明白如何知道在這一點上滾動內部滾動視圖多少? 說我打電話,自我。innerscrollview setContentOffset(x,y)animated:NO]; 我不知道我應該如何在這裏推導出y值。 UNless你說我可以簡單地將touchesMoved params傳遞給它:self.innerscrollview touchesMoved:touches withEvent:event]; –

+0

scrollview不響應該選擇器,因此您無法使用它。你必須做一些數學。計算原點(當您的內部scrollView變爲活動狀態時),然後通過移動多少來進行滾動。觸摸NSSet中的觸摸對象具有locationInView參數,可以幫助您做到這一點。還請查看文檔:https://developer.apple.com/library/ios/documentation/uikit/reference/UITouch_Class/Reference/Reference.html#//apple_ref/occ/cl/UITouch –