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 大家可以自己到网上搜下,功能挺强大的;

你可能感兴趣的:(iOS-GCD实现定时器)