1 . 新增UIButton的分类UIButton+Categroy 代码如下:
- (void)startTime:(NSInteger)time countDownTitle:(NSString *)countDownTitle;
{
__block NSInteger timeout = time; // 倒计时时间
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(), ^{
// 设置界面的按钮显示
[self setTitle:@"获取验证码" forState:UIControlStateNormal];
[self setTitleColor:COLOR_GREEN forState:UIControlStateNormal];
self.enabled = YES;
self.layer.borderColor = COLOR_GREEN.CGColor;
});
} else {
NSInteger seconds = timeout;
NSString *strTime = [NSString stringWithFormat:@"%2ld", seconds];
dispatch_async(dispatch_get_main_queue(), ^{
[self setTitle:[NSString stringWithFormat:@"%@ %@s",countDownTitle,strTime] forState:UIControlStateNormal];
self.enabled = NO;
[self setTitleColor:Color_Assist_one forState:UIControlStateNormal];
self.layer.borderColor = Color_Assist_one.CGColor;
});
timeout--;
}
});
dispatch_resume(_timer);
}
2 . 代码实现
[button startTime:60 countDownTitle:@"重新获取"];```
GCD与NSTimer 实现本质区别可以阅读这篇文章 [IOS定时器,你真的会用吗?](http://www.jianshu.com/p/c167ca4d1e7e?open_source=weibo_search)
[Demo地址](https://github.com/lebronjames-zh/ZHVerifyCodeCountDown)