0

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

4

2 に答える 2

2

UI更新コードを。でブロックに入れてみてくださいremoveSpinner

dispatch_async(dispatch_get_main_queue(), ^(void)
{
    [label1 setText:@"Test1"];
    [label2 setText:@"Test3"];
    [self removeSpinner]; // Removes UIActivityIndicator from screen
});
于 2012-12-10T21:37:04.793 に答える
0

[self.view setNeedsDisplay];の直前にaを付け[self removeSpinner]ます。

于 2012-12-10T21:12:03.637 に答える