触摸时暂停 UIScrollView 的滚动

Posted

技术标签:

【中文标题】触摸时暂停 UIScrollView 的滚动【英文标题】:Pause UIScrollView's scrolling when touched 【发布时间】:2012-05-26 01:26:58 【问题描述】:

我有一个 UIScrollView,它是一个在特定搜索词之后快速更新的 Twitter 流。每秒处理大量推文。我希望用户能够触摸表格视图上的任何位置并让它在添加新推文时停止滚动,以便用户可以停止并阅读单个推文。

目前,我正在添加这样的推文:

[self.tweets insertObject:model atIndex:0];
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationTop];

添加推文时,滚动视图的位置被锁定,因此整个视图会向下移动以容纳推文。以如此快的速度,这使得屏幕上的推文以难以辨认的速度放大。理想情况下,我想这样做,如果与 TableView 接触(由覆盖它的 UIButton 完成),则滚动定位将锁定到视图中的该行。解决这个问题的最佳方法是什么?

【问题讨论】:

如果滚动视图被锁定,推文如何放大? 因为它们是从顶部添加到视图中的,这会改变其下方每条推文的垂直位置。 【参考方案1】:

每次添加推文时,都会通过更改表格视图的滚动位置来考虑其高度。为此,请使用setContentOffset:animated:。将NO 用于animated 参数以使更改即时并传递与推文高度相关的CGPoint。因此,如果推文的高度为 50,则执行以下操作:

[tableView setContentOffset:CGPointMake(tableView.contentOffset.x, tableView.contentOffset.y -50) animated:NO];

这会将表格视图向上滚动 50,这意味着用户必须滚动才能查看刚刚添加的推文。

【讨论】:

以上是关于触摸时暂停 UIScrollView 的滚动的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 在滚动时暂停 NSTimer

自动滚动时 UIScrollView 触摸不起作用

UIScrollView 滚动时暂停任何操作

UIScrollView 需要触摸才能滚动

UIScrollView 在触摸动作时自动滚动到顶部

触摸状态栏时 UIScrollView 滚动到底部