我正在实现倒计时,其值显示在 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];
});
这里的解决方案是什么?