//倒计时时间

__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);

05-14 10:42