1

UILabelテキストが変更されるたびにテキストを更新するコードを書きたいと思います。私は次のような小さなデモを書いています:

- (IBAction)ButtonPressed:(id)sender {
    for(int i = 0; i < 100000; ++i)
    {
        [self.Label setText:[NSString stringWithFormat:@"%d",i]];
        [self.Label setNeedsDisplay];
    }
}

ボタンをクリックすると、ラベルは 1 回だけ 99999 に変わりますが、0 から 99999 まで 99999 回表示されると思います。

前もって感謝します!

4

2 に答える 2

3

setNeedsDisplayビューを描画したいことをシステムに伝えますが、それを強制するわけではありません。forビューは、ループの完了後に発生する次の描画サイクルで再描画されます。100,000 件の変更をすべて表示するには、人間が認識できる量だけラベルの更新を遅らせる必要があります。

于 2013-07-02T15:15:29.647 に答える
2

上記の答えは正しいですが、詳しく説明すると、ラベルの内容を目に見えるように更新したい場合は、次のことを試すことができます

- (IBAction)ButtonPressed:(id)sender {
    for(int i = 0; i < 100000; ++i)
    {
        double delayInSeconds = 0.01 * i;
        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds *     NSEC_PER_SEC));
        dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
            [self.Label setText:[NSString stringWithFormat:@"%d",i]];
            [self.Label setNeedsDisplay];
        }); 
    }
}

ただし、これはおそらく無関係です。より触覚的なアプローチは、ボタンが押された回数をインスタンス変数に保存し、タッチするたびにインクリメントし、ラベル値を適切に設定することです。

于 2013-07-02T15:41:12.397 に答える