UIScrollView 通知

Posted

技术标签:

【中文标题】UIScrollView 通知【英文标题】:UIScrollView notifications 【发布时间】:2010-04-10 10:45:00 【问题描述】:

我正在编写一个与 Apple 的 Weather.app 非常相似的应用程序:底部有一个 UIPageControl,屏幕中间有一个 UIScrollView。 在我的代码中,我实现了- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 方法来确定用户何时确实移动到了新页面。如果他们移动到新页面,我会加载相邻页面的数据,以使进一步的页面切换更快。 (在 Apple 的一个示例中,使用了 - (void)scrollViewDidScroll:(UIScrollView *)sender,但这会导致我的应用在加载新页面时很快挂起,因此不适合。) 该代码运行良好。

当用户单击 UIPageControl 时,我正在使用 scrollRectToVisible:: 以编程方式在滚动视图内滚动。问题是scrollRectToVisible: 在滚动完成时不会向 UIScrollViewDelegate 发布通知 - 因此在使用 UIPageControl 时永远不会调用负责加载相邻页面的代码。

有什么方法可以让 UIScrollView 在被scrollRectToVisible: 方法调用时通知它的委托?还是我必须使用线程来防止我的应用冻结?

谢谢!

--Ry

【问题讨论】:

请从标题中删除[iPhone],因为您不会在问题标题中添加标签。 【参考方案1】:

-scrollViewDidEndScrollingAnimation:怎么样?

如果不起作用,请尝试收听UITextSelectionDidScroll 通知。 (当然,它是无证的。)

另外,SDK 安全的方法是测量动画所用的时间,并在-scrollRectToVisible: 的调用点发送延迟通知。

【讨论】:

【参考方案2】:

您可以添加此委托方法:

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView

滚动视图在 UIScrollView 和 setContentOffset:animated: 和 scrollRectToVisible:animated: 方法的实现结束时调用此方法,但仅限于请求动画时。

【讨论】:

以上是关于UIScrollView 通知的主要内容,如果未能解决你的问题,请参考以下文章

iOS控件详解之UIScrollView

动态检测 UIScrollView 的高度

带有 ImageView 的 UIScrollView 不垂直滚动

如何阻止 UIScrollView 吞下触摸

UIScrollVIew 中的静态对象

UIScrollview 无法识别从屏幕边缘滑动