今天要和大家分享的是利用GCD实现定时器,一向少废话的我,就不和大家墨迹了,直接上代码,我这里以实现验证码按钮以例:
//首先是验证码间隔时间
__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);
//设置处理事件的时间间隔这里设置1S
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(), ^{
//设置界面的按钮显示 根据自己需求设置
[btn setTitle:@"获取验证码" forState:UIControlStateNormal];
btn.userInteractionEnabled = YES;
});
}else{
//int minutes = timeout / 60;
int seconds = timeout % 60;
NSString *strTime = [NSString stringWithFormat:@"%.2d", seconds];
dispatch_async(dispatch_get_main_queue(), ^{
//设置界面的按钮显示 根据自己需求设置
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1];
[btn setTitle:[NSString stringWithFormat:@"%@秒重发",strTime] forState:UIControlStateNormal];
[UIView commitAnimations];
btn.userInteractionEnabled = NO;
});
timeout--;
}
});
//开启定时器
dispatch_resume(_timer);
就这样吧 希望能够对大家有所帮助,如果大家想多了解下dispatch_source 大家可以自己到网上搜下,功能挺强大的;