1

当实时更新进度条或其他进度指示器以反映应用程序处理中正在进行的活动时,如果不使用这个聪明的代码片段,我认为没有办法做到这一点:

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

否则,进度条会一直等到运行循环结束,在这种情况下,它会跳转到进度条的结尾。

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

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

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

4

2 回答 2

3

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

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

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

一般来说,您不想在主线程上运行长时间或复杂的操作,因为它会阻塞整个 UI。

于 2012-04-30T14:47:23.127 回答
1

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

希望这可以帮助..

于 2012-04-30T20:59:46.617 回答