我正在尝试在长资源加载过程中更新UIViewressView进度条。假设我正在从NIB文件中加载一堆位图(可能是一百个)。加载10后,我向UIProgressView发出一个.progress,它是已经显示的UIView的一部分。所以,我发出:
myView.myProgressView.progress=0.2;
然后,我加载另外10个位图,然后发出:
myView.myProgressView.progress=0.4;
等等。当应用程序运行时,进度条不会前进。它只是停留在初始位置。听起来像是一个完整的白痴,我是否必须在单独的线程上加载我的资源,以便操作系统可以更新UI,或者,有更简单的方法吗?感谢您的帮助。
答案 0 :(得分:1)
是。将它们加载到单独的线程上。或者只使用performSelector
:
[self performSelector:@selector(setProgressBar) withObject:nil afterDelay:0.0];
(并创建一个setProgressBar
函数,从成员变量中读取当前值并更新UI)
答案 1 :(得分:0)
每次更新UI后,您都可以运行runloop的一步:
SInt32 result;
do {
result = CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, TRUE);
} while(result == kCFRunLoopRunHandledSource);
它可能会产生其他不良后果(例如,允许用户与UI交互,在执行之前执行视图控制器的委托,例如viewDidAppear
等),所以要非常非常小心。