UIScrollView 滚动时暂停任何操作

Posted

技术标签:

【中文标题】UIScrollView 滚动时暂停任何操作【英文标题】:Pause any operations while UIScrollView is scrolling 【发布时间】:2014-03-07 09:39:38 【问题描述】:

我有一个大的分页 UIScrollView,里面有几个图像和视图。我想要实现的目标是在用户浏览页面时暂停任何后台操作。我需要这个,因为该应用正在下载和计算内容,并且滑动动画不流畅。

有什么想法吗?

谢谢

【问题讨论】:

你是否在uiscrollview图像中实现了延迟加载..?根据您的问题,我猜您需要延迟加载图像,这会使您的滚动视图在滚动时受到影响.. 【参考方案1】:

你应该以相反的方式思考。

在后台下载图像后,使用主线程在 UI 中更新它。

主线程正在处理 UI 更新。

根据您的描述,

“滑动动画不流畅”

您正在主线程上下载图像。

【讨论】:

我已经在使用队列下载和绘制图像了。事实是我在后台做了很多(真的很多)事情。我想暂停所有这些,因为我无法控制所有内容,也不是所有内容都在众所周知的队列中。 你到目前为止所尝试的。在后台下载显示一些代码【参考方案2】:

您可以使用 NSOperationQueue 并在 UIScrollView 的委托中捕获滚动事件以暂停/继续操作。

- (void)viewDidLoad
     [super viewDidLoad];
     queue=[[NSOperationQueue alloc]init];

     NSBlockOperation *intenseOperation=[NSBlockOperation blockOperationWithBlock:^
        //do intense stuff
     ];

     [queue addOperation:intenseOperation];


- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
      [queue setSuspended:NO];

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
      [queue setSuspended:YES];

【讨论】:

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

UIScrollView 在滚动时暂停 NSTimer

UIScrollView 暂停 NSTimer 直到滚动完成

UIView 不会在 UIScrollView 内垂直滚动

iOS开发UI篇—UIScrollView控件介绍

iOS开发UI篇—UIScrollView控件介绍

阻止UIScrollView中的UISlider触发滚动