我正在开发的iPad应用程序存在问题。我有以下代码:
CFTimeInterval startTime = CFAbsoluteTimeGetCurrent();
[self showSpinnerWithMessage:@"Loading settings..."]; // Shows a UIActivityIndicator on screen
dispatch_async(dispatch_get_global_queue(0, 0), ^
{
//Updating items on screen here
[label1 setText:@"Test1"];
[label2 setText:@"Test3"];
//...
CFTimeInterval difference = CFAbsoluteTimeGetCurrent() - startTime;
if (difference < MINIMUM_INDICATOR_SECONDS)
{
[NSThread sleepForTimeInterval:MINIMUM_INDICATOR_SECONDS - difference];
}
dispatch_async(dispatch_get_main_queue(), ^(void)
{
[self removeSpinner]; // Removes UIActivityIndicator from screen
});
};
问题在于,有时UI需要一段时间才能更新,并且在这些特定实例中,微调器(UIActivityIndicator)在UI实际更新之前就消失了。我意识到这是因为屏幕上的项目实际上没有更新,直到下一个运行循环,所以我的问题是,如何让我的[self removeSpinner]
调用等待UI更新?
答案 0 :(得分:2)
尝试将UI更新代码放入removeSpinner
的块中。
dispatch_async(dispatch_get_main_queue(), ^(void)
{
[label1 setText:@"Test1"];
[label2 setText:@"Test3"];
[self removeSpinner]; // Removes UIActivityIndicator from screen
});
答案 1 :(得分:0)
将[self.view setNeedsDisplay];
放在[self removeSpinner]
。