滚动时如何将UIScrollView子视图“粘贴”到顶部/底部?

时间:2011-07-21 00:25:17

标签: uiscrollview uiscrollviewdelegate

你会在像Gilt这样的iPhone应用中看到这一点。用户滚动视图,当scrollView的其余部分在下面滑动时,子视图显然“粘住”到一个边缘。也就是说,scrollView中有一个文本框(或其他),当scrollView命中视图的顶部时,随着视图的其余部分继续滑动,“粘在那里”。

所以,有几个问题。首先,当感兴趣的视图通过(或重新出现)时,可以通过“scrollViewDidScroll:”(在正常滚动期间)确定。这里有相当多的粒度 - 委托调用之间的差异可以是百分或更多。也就是说,当您看到视图接近scrollView的顶部时,您打开了scrollView顶部下静态显示的视图的第二个副本。我没有对此进行编码,但似乎它缺乏真正的“棒”外观 - 视图将首先消失然后重新出现。

其次,如果有一个setContentOffset:animated,则不会获得委托消息(Gilt不会这样做)。那么,在这种情况下你如何获得回调?你在“scroll.layer.presentationLayer.bounds”上使用KVO吗?

2 个答案:

答案 0 :(得分:1)

好吧,我找到了一种方法来做到这一点。当用户通过轻弹和拖动滚动时,UIScrollView为其委托提供“scrollViewDidScroll:”消息。然后,您可以查看滚动条是否已将内容移动到需要采取某些操作的位置。

当“粘贴”视图时,将其从scrollView中删除,然后将其添加到scrollView的superview(原点为0,0)。在取消时,请进行相反的操作。

如果您使用UIScrollView setContentOffset:animated:,则会变得更加棘手。我做的是子类UIScrollView,使用一个标志来指定它是setContentOffset移动偏移量,然后启动一个快速运行的计时器来监视contentOffset。

我把处理数学的方法和将子视图粘贴/取消粘贴到这个子类中。它看起来很不错。

答案 1 :(得分:0)

Gilt使用表格视图来完成此任务。具体来说,在表视图的委托中,有以下两种方法:

– tableView:viewForHeaderInSection:– tableView:heightForHeaderInSection:

相关问题