開発中の 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 の更新に時間がかかる場合があり、これらの特定の例では、UI が実際に更新される前にスピナー (UIActivityIndicator) が消えてしまうことです。これは、画面上のアイテムが次の実行ループまで実際に更新されないためだと思います。私の質問は、[self removeSpinner]
UI が更新されるまで呼び出しを待機させるにはどうすればよいですか?