2

您可以在 Gilt 等 iPhone 应用程序中看到这一点。用户滚动一个视图,并且一个子视图显然“粘”到一个边缘,因为其余的 scrollView 在下面滑动。也就是说,scrollView 中有一个文本框(或其他任何内容),当 scrollView 到达视图顶部时,当视图的其余部分继续滑动时“粘”在那里。

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

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

4

2 回答 2

1

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

当“粘贴”视图时,将其从 scrollView 中移除,然后将其添加到 scrollView 的 superview(原点为 0,0)。不粘时,反之。

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

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

于 2011-08-01T19:11:24.003 回答
0

Gilt 使用表格视图来完成此操作。具体来说,在表视图的委托中,这两种方法:

– tableView:viewForHeaderInSection:– tableView:heightForHeaderInSection:

于 2013-02-13T00:25:13.863 回答