UILabel に値が表示されたカウントダウンを実装していますが、問題が発生しました。簡略化されたコードは次のとおりです。
self.countdownTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(countdown) userInfo:nil repeats:YES];
- (void)countdown {
self.countdownLabel.text = [NSString stringWithFormat:@"%i",[self.countdownLabel.text intValue]-1];
// Handle time out
if ([self.countdownLabel.text intValue] == 0) {
[self.countdownTimer invalidate];
self.countdownTimer = nil;
}
}
それは正常に動作しますが、スクロールビューのスクロールなど、ビューコントローラーで他のUI操作を行うと、スクロールビューがスクロールするとタイマーがハングし、アイドル状態の瞬間を補うためにブーストします。
ラベルの更新をバックグラウンド キューにディスパッチしてみましたが、もちろんうまくいきませんでした。
dispatch_queue_t bgQ = dispatch_queue_create("bgQ", 0);
dispatch_async(bgQ, ^{
self.countdownLabel.text = [NSString stringWithFormat:@"%i",[self.countdownLabel.text intValue]-1];
});
ここでの解決策は何ですか?