美文网首页
iOS-GCD实现定时器

iOS-GCD实现定时器

作者: hyeeyh | 来源:发表于2016-10-09 10:50 被阅读91次

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

相关文章

  • iOS-GCD实现定时器

    今天要和大家分享的是利用GCD实现定时器,一向少废话的我,就不和大家墨迹了,直接上代码,我这里以实现验证码按钮以例...

  • Golang-基于TimeingWheel定时器

    设计思路 在linux下实现定时器主要有如下方式 基于链表实现定时器 基于排序链表实现定时器 基于最小堆实现定时器...

  • iOS三大定时器:NSTimer、CADisplayLink、G

    一、介绍NSTimer:基于Runloop实现的定时器CADisplayLink:基于Runloop实现的定时器,...

  • iOS-GCD定时器的使用

    在iOS开发的过程中定时器的使用比较频繁的,比较常见的场景是验证码的发送,或者是倒计时的展示.一般的需求我们直接使...

  • 2017.12.21学习总结

    下午学习了定时器,定时器分为高级定时器、通用定时器和基本定时器,我们主要研究通用定时器。 定时器中断实现步骤:...

  • Linux 设备驱动之内核定时器 2020-02-20

    该内核定时器的实现是基于低精度定时器实现,高精度定时器的实现代码更为复杂,将在其他章节做相应介绍struct ti...

  • Linux C/C++定时器的实现原理和使用方法

    定时器的实现原理 定时器的实现依赖的是CPU时钟中断,时钟中断的精度就决定定时器精度的极限。一个时钟中断源如何实现...

  • GCD定时器的实现

    GCD定时器 GCD定时器不受RunLoop约束,比NSTimer更加准时 证明,实现GCD定时器

  • Linux 下C++ 定时器

    问题背景:Linux下用C++实现一个定时器。一、使用 setitimer 实现定时器功能: setitimer ...

  • gcd 定时器

    GCD定时器的实现

网友评论

      本文标题:iOS-GCD实现定时器

      本文链接:https://www.haomeiwen.com/subject/puupyttx.html