2

カレンダーの予定を取得してユーザーにデータを表示するアプリがあります。ラベルを更新しようとすると、奇妙な動作が発生します。

カレンダーデータは問題なく取得できますが、それが完了するとNSLoglabel.textプロパティによるとすでに変更されているという問題がありますが、ビューが再描画されるまでにさらに4〜8秒かかります。

したがって、.textプロパティが変更されたときではなく、ラベルが再描画されたときを検出しようとしているので、データがラベルに入力されると同時に進行状況ビューを非表示にできます。

私はすでに試してみsetNeedsDisplayましsetNeedsLayoutself.view、そしてラベル自体。ラベルのプロパティが変更された.text-機能しません。

したがって、setNeedsDisplay(とにかく次の再描画時の更新のみを理解している)の使用について何かを完全に見逃していない限り、私の質問は、UILabelおよび/またはUIView再描画自体をいつ検出するのですか?

私のアプリの設定方法:

ここに画像の説明を入力してください

私はこれに約3週間立ち往生しています。

4

2 に答える 2

3

setNeedsDisplayを使用して、メイン スレッドで呼び出されていることを確認しますperformSelectorOnMainThread:withObject:waitUntilDone:。次に例を示します。

[view performSelectorOnMainThread:@selector(setNeedsDisplay) 
                       withObject:nil 
                    waitUntilDone:NO];
于 2013-01-31T01:43:56.167 に答える
0

Apple 開発ドキュメントを引用します。

ビューは、次の描画サイクルまで実際には再描画されません。その時点で、無効化されたすべてのビューが更新されます。

多くの複雑な計算を処理するなど、メインスレッドが他のものによってブロックされている可能性があります

例えば:

- (void)testMethod
{
    myLabel.mytext = @"aaaa";
    [myLabel setNeedsDisplay];
    // some complex calculations
    // the quickest ,  it will run finish the method then redraw.
}
于 2013-01-31T01:53:14.573 に答える