iOS-GCD实现定时器

今天要和大家分享的是利用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 大家可以自己到网上搜下,功能挺强大的;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 标签(空格分隔): 计时器 GCD timer 倒计时 GCD 定时器 NSTimer 的定时器是在 RunLoo...
    骑行怪状阅读 19,058评论 7 29
  • 目录(GCD): 关键词 混淆点 场景应用 总结 1. 关键词 线程概念: 独立执行的代码段,一个线程同时间只能执...
    Ryan___阅读 1,290评论 0 3
  • 程序中同步和异步是什么意思?有什么区别? 解释一:异步调用是通过使用单独的线程执行的。原始线程启动异步调用,异步调...
    风继续吹0阅读 1,050评论 1 2
  • 在看完《摔跤吧!爸爸!》这部电影以后,我明白了一个真理是世上没有女子不能做的事,只有女子不愿做的事,只要努...
    谢小倩0410阅读 502评论 1 2
  • 【…这里是……哪里?】 黑暗的视界里突然大亮,眼前是两个重叠在一起的身影,银白的刀尖从他们腹部穿破,刀刃在额前堪堪...
    不过风清阅读 242评论 0 0