5

ユーザーがテーブルをスクロールすることによって NSTimer が遅延するのを防ぐにはどうすればよいですか?

私は答えを見つけました:

0.4 ~ 0.8 秒間隔で約 8 ~ 9 回繰り返すタイマーがありました。あまり精度は必要ありませんが、ユーザーがテーブルをスクロールすると、テーブルのスクロールが完了するまでタイマーが動作しなくなります (これは数秒かかる可能性があります!)。バックグラウンド スレッドが必要だと思っていましたが、バックグラウンド スレッドのタイマーは実装がやや複雑でした。

私の問題に対する答えは非常にシンプルで簡単でした。タイマーを呼び出した後、次の行を追加するだけです。

//////////// start the timer

self.playingTimer = [NSTimer scheduledTimerWithTimeInterval:tempo target:self selector:@selector(playSoundFromArray:) userInfo:nil repeats:YES];

//////////// the magic line:

[[NSRunLoop currentRunLoop] addTimer:self.playingTimer forMode:UITrackingRunLoopMode];

これで、テーブルを好きなだけスクロールでき、タイマーも正常に動作します!!!

今、もう少し NSRunLoop を勉強する必要があります...

4

1 に答える 1

1

NSDefaultRunLoopMode モードのタイマーを追加する必要があります。UITrackingRunLoopMode は、UI アクション (この場合はスクロール) を追跡することによって使用されます。

于 2012-08-15T07:21:50.933 に答える