如何在执行大数学函数时更新进度条(objective-c)?

时间:2013-03-29 21:57:59

标签: objective-c uiprogressview

我有数学函数(大约是O ^(10 ^ 7)),在搜索结果时我必须显示进度。所以我有进度条。问题是,如何更新进度条? 我试过这样做:

self.progressBar.progress = 0.0;
self->progress = 0.0;
for (1..10^7) {
    ...
    if (self.progressBar.progress < self.progress + 0.01) {
        [self updateProgress];
    }
}
[self updateProgress];

2 个答案:

答案 0 :(得分:2)

在单独的线程中运行该操作。这是必须的。

您可以将操作分为几个步骤吗?你知道步数吗? 然后在每个步骤后将进度条更新为stepIndex/numSteps百分比。

如果您无法将操作划分为多个步骤,但您知道操作需要多长时间,则可以将条形更新为timeSinceStart/expectedTime百分比。使用NSTimer进行定期更新。

如果您不能这样做,请仅使用UIActivityIndicator,即显示应用程序正在执行某项操作的组件,但不显示该操作可以执行的时间。

答案 1 :(得分:1)

有时您必须这样做:

CFRunLoopRunInMode (CFRunLoopCopyCurrentMode(CFRunLoopGetCurrent()), 0, FALSE);

让UI更新进度条。

另外..你有动画:是的,并且在所有版本的iOS中都没有。

您可能需要在updateProgress方法中考虑:

if ([activityProgressView respondsToSelector:@selector(setProgress:animated:)]) {
    [activityProgressView setProgress:0.5 animated:YES];
}
else {
    [activityProgressView setProgress:0.5];
}
CFRunLoopRunInMode (CFRunLoopCopyCurrentMode(CFRunLoopGetCurrent()), 0, FALSE);