2015-09-12 114 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

相关问题