//倒计时时间
__block int timeout = 60;
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);//创建globle队列
//创建timer 定时器
dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
//每秒执行。 设置1s触发一次,0s的误差
dispatch_source_set_timer(_timer, dispatch_walltime(NULL, 0), 1.0*NSEC_PER_SEC, 0);
//触发事件
dispatch_source_set_event_handler(_timer, ^{
if(timeout<=0){ //倒计时结束,关闭
dispatch_source_cancel(_timer); //取消 dispatch 源
dispatch_async(dispatch_get_main_queue(), ^{
//回主线程 更新UI 设置界面的按钮显示 根据自己需求设置
weakSelf.getCodeBtn.enabled = YES;
[weakSelf.getCodeBtn setTitle: @"获取验证码" forState:UIControlStateNormal];
});
}
else
{
int seconds = timeout % 60;
NSString *strTime = [NSString stringWithFormat:@"%.0d", seconds];
dispatch_async(dispatch_get_main_queue(), ^{
//回主线程 更新UI 设置界面的按钮显示 根据自己需求设置
weakSelf.getCodeBtn.enabled = NO;
weakSelf.getCodeBtn.titleLabel.textAlignment = NSTextAlignmentCenter;
if (strTime.length == 0) {
[self.getCodeBtn setTitle:[NSString stringWithFormat:@"验证码(60)"] forState:UIControlStateDisabled];
}
else
{
[self.getCodeBtn setTitle:[NSString stringWithFormat:@"验证码(%@)",strTime] forState:UIControlStateDisabled];
}
});
timeout--;
}
});
//开始执行dispatch源
dispatch_resume(_timer);