0

私が作業しているアプリには、他のアクションに比べて比較的長い時間がかかる機能が 1 つあります。関数の実行中に画像を表示して、アプリがまだ正常に動作していることをユーザーに示したいと思います。

私がそれを行うことができる方法は次のとおりです。

_checkImpossibleImage.hidden = NO;
bool ratioIsPossible = [PaintGame isPossible:_paintChipRatio:_paintCanRatios];
_checkImpossibleImage.hidden = YES;

本質的には、画像を表示に設定し、関数を実行してから、画像を非表示に設定します。ただし、このセクションのすべてのコードが実行されるまで、ビューは更新されないようです。全体的な機能は次のとおりです。

- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 0){
        // Do nothing (cancel option selected)
    } else {
        if (_buttonKey == @"New") {

            _checkImpossibleImage.hidden = NO;
            bool ratioIsPossible = [PaintGame isPossible:_paintChipRatio:_paintCanRatios];
            _checkImpossibleImage.hidden = YES;

            ...
        }
    ...
    }
}

現在のビューを強制的に更新する方法はありますか、または関数の実行中に「読み込み」ポップアップを作成するより良い方法はありますか?

4

2 に答える 2

0

描画は、実行ループが終了するまで行われません。コードの途中でそれを実現する方法はありません。isPossible::メインのディスパッチキューに配置することで、ループの次のゴーアラウンドまで(ちなみに、これは不適切なメソッド名です)への呼び出しを遅らせることができます。

_checkImpossibleImage.hidden = NO;
dispatch_async(dispatch_get_main_queue(), ^{
        bool ratioIsPossible = [PaintGame isPossible:_paintChipRatio:_paintCanRatios];
        _checkImpossibleImage.hidden = YES;
        // More code to deal with the value of ratioIsPossible
});
于 2012-07-18T00:32:18.973 に答える
0

これを行うときにUIをブロックするべきではありません.別のスレッドで時間がかかるメソッドを呼び出すだけの方が良いと思います.

于 2012-07-18T00:22:23.573 に答える