实时进度条更新

时间:2012-04-30 14:42:30

标签: iphone objective-c

当实时更新进度条或其他进度指示器以反映应用程序处理中发生的活动时,如果不使用此聪明的代码段,我认为无法执行此操作:

[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantPast]];

否则,进度条会一直等到运行循环结束,然后它会跳转到进度条的结论。

如果您想在单个运行循环期间(或我认为是单个运行循环)更新进度,这是唯一的方法吗?

进度条通常如何编码以实时更新?

以上代码是否危险?我真的不太了解直接操作运行循环,这让我很紧张在一个我不理解的应用程序中做某事。这段代码有效,但这是一个好主意吗?

2 个答案:

答案 0 :(得分:3)

在后台线程/ NSOperationQueue / GCD上运行冗长的操作,并定期更新UI。 UI始终在主线程上运行,因此更新将快速生效。尝试这样的事情:

for (...) {
  // some process
  // ...

  dispatch_async(dispatch_get_main_queue(),^ {
    [self.progressIndicator setProgress:x animated:YES];
  });
}

通常,您不希望在主线程上运行长操作或复杂操作,因为它会阻止整个UI。

答案 1 :(得分:1)

我正在使用NSTimer来满足这种需求。假设您要播放/流式播放音频文件,并且需要显示进度条位置的持续时间,这是我的方式。

希望这会有所帮助..