在循环期间更新 UIProgressBar 进度

Posted

技术标签:

【中文标题】在循环期间更新 UIProgressBar 进度【英文标题】:updating UIProgressBar progress during loop 【发布时间】:2014-07-11 15:45:59 【问题描述】:

我找不到关于如何在迭代循环时更新 UIProgressbar 进度的明确答案,例如:

for (int i=0;i<items.count;i++) 
    Object *new = [Object new];
    new.xxx = @"";
    new...
    ...
    float progress = (i+1) / (float)items.count;
    progressBar.progress = progress;

[self save];

如何在单独的线程上更新 UI?

【问题讨论】:

在后台线程上执行长时间运行的进程,并在主线程上更新 UI。这是对 Grand Central Dispatch (GCD) 的完美使用。 【参考方案1】:

在后台线程上运行循环,并在主线程上更新进度条:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^
    for (int i=0;i<items.count;i++) 
        Object *new = [Object new];
        new.xxx = @"";
        new...
        ...
        float progress = (i+1) / (float)items.count;
        dispatch_async(dispatch_get_main_queue(), ^
            progressBar.progress = progress;
        );

    
    [self save];
);

【讨论】:

以上是关于在循环期间更新 UIProgressBar 进度的主要内容,如果未能解决你的问题,请参考以下文章

在循环期间更新进度条

将 UIProgressBar 放在 UIToolbar 上

UIProgressBar:如何根据背景颜色更改 UILabel 颜色

IOS:多个 NSUrlConnection 以及多个 UIProgressBar

网络通话期间的进度条更新

使用 NSFileManager 在复制文件期间更新进度条