1

だから私はこのコードを持っています:

int i = 3;
dispatch_async(queue, ^{
    dispatch_async(dispatch_get_main_queue(), ^{
        for (;;)
        {
            t1 = [NSTimer scheduledTimerWithTimeInterval:i target:self selector:@selector(updateUI) userInfo:nil repeats:NO];
        }
    });
});

そして、私がやっていることは、ゲームで3秒ごとにUIを更新していることですが、タイマーがオフになる間隔を変更できるようにしたいので、タイマーで無限ループを使用しました。私の問題は、メイン キューを使用すると非同期にならないことですが、UI を更新するためにメイン キューを使用する必要があるため、何をすべきかわかりません。

4

1 に答える 1

2

メイン スレッドで NSTimer を作成する場合は、メイン スレッドでセレクターを呼び出します。

- (void)updateTimer
{
    // destroy timer
    [t1 invalidate];
    // start new timer
    t1 = [NSTimer scheduledTimerWithTimeInterval:i target:self selector:@selector(updateUI) userInfo:nil repeats:NO];
}


- (void)updateUI
{
    ......
    [self updateTimer];
}

[self updateTimer]UI の更新を開始するには、開始アプリケーションで呼び出す必要があります。

于 2013-10-26T10:56:23.703 に答える