2015-09-12 112 views
3

我有一個父滾動視圖(不是直接子視圖)中包含的子滾動視圖。我想要的是,只要子滾動視圖到達其內容的結尾,父滾動視圖就會開始沿相同的方向滾動。當子滾動視圖到達結束時滾動父滾動視圖

這類作品開箱即用的,但不是真的。現在我必須擡起手指,讓父滾動視圖在孩子到達終點後開始滾動。

對此有何看法?

編輯:

的什麼我正在尋找可以在Snapchat通過向右滑動在表視圖細胞揭示聊天控制器可以看到一個例子。

+0

以下是此任務的一個很好的示例回購:https://github.com/goktugyil/EZSwipeController – Esqarrouth

回答

0

不知道如果我理解正確的有哪些呢不是直接孩子意思。但是,只要你到達子視圖滾動的末尾,iOS應該自動爲你做,它應該讓你滾動父滾動。

爲此,您需要實現爲孩子:

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate: (BOOL)decelerate{ 
    scrollView.bounces = NO; 
} 

scrollView.bounces = NO不讓滾動視圖跳回上結束滾動。所以它只是停留在停止滾動的位置。

然後你需要觸發從父爲子scrollViewDidScroll方法滾動。

類似的東西來:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{ 
     CGFloat scrollViewHeight = scrollView.frame.size.height; 
     CGFloat scrollContentSizeHeight = scrollView.contentSize.height; 
     CGFloat scrollOffset = scrollView.contentOffset.y; 

     CGFloat offset = scrollContentSizeHeight - (scrollOffset + scrollViewHeight); 
     if (offset <= 0) 
      [self.parentView setContentOffset:CGPointMake(self.parentView.contentOffset.x, self.parentView.contentOffset.y + diffOffset) animated:YES]; 
} 

哪裏diffOffset是你想要的parentScroll滾動的距離。

您可能希望更先進的解決方法。

例如可以實現

scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset 

讓你知道什麼是滾動的velocity,比較targetContentOffsetscrollContentSizeHeightscrollViewHeight應該讓你知道,這個特殊的滾動即將結束拖動達到結束滾動查看內容。

而且你可以計算diffOffsetanimationTime更準確。

這可能是很好的阻止滾動的子視圖時,它不是父滾動中完全可見,這樣的滾動能力似乎只有當你向上滾動直到一定的位置。

+0

感謝您的回覆,我一定會嘗試您的解決方案。 –

+0

只是在一個案例中,我創建了一個簡單的測試項目,在UIScrollView中垂直放置兩個'UITableView',它確實有效。如果需要,我可以把它放在某個地方。 – teamnorge

相關問題