联系人:石虎 QQ:1224614774 昵称: 嗡嘛呢叭咪哄
QQ群:807236138 群称: iOS 技术交流学习群
代码实现
//倒计时按钮
@property(nonatomic,strong)UIButton *btnCountdown;
//用 GCD实现倒计时功能
- (void)btnCountdownClick{
//倒计时默认状体
[_btnCountdown setTitle:@"重发(60s)" forState:UIControlStateNormal];
//倒计时时间
__block int timeout=59;
//倒计时全局队列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//设置一个事件处理器
dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);
//设置时间处理器时间
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_async(dispatch_get_main_queue(), ^{
//设置界面的按钮显示 根据自己需求设置
_btnCountdown.userInteractionEnabled = YES;
//设置倒计时标题
[_btnCountdown setTitle:@"获取验证码" forState:UIControlStateNormal];
});
}else{
//去时间余
int seconds = timeout % 60;
//拿到时间文字
NSString *strTime = [NSString stringWithFormat:@"%.2d", seconds];
//回到主线程
dispatch_async(dispatch_get_main_queue(), ^{
//设置界面的按钮显示 根据自己需求设置
[UIView beginAnimations:nil context:nil];
//设置动画时间为1秒
[UIView setAnimationDuration:1];
//时间倒计时为0的时候显示重发?秒
[_btnCountdown setTitle:[NSString stringWithFormat:@"重发(%@秒)",strTime] forState:UIControlStateNormal];
[UIView commitAnimations];
_btnCountdown.userInteractionEnabled = NO;
});
timeout--;
}
});
dispatch_resume(_timer);
}