使用GCD实现倒计时

__block int timeout = 60;	// 倒计时时间
    
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 <= 1) { // 倒计时结束
        dispatch_source_cancel(_timer);
        dispatch_async(dispatch_get_main_queue(), ^{
            getCodeButton.backgroundColor = RGBACOLOR(232, 154, 37, 1);
            getCodeButton.userInteractionEnabled = YES;
            [getCodeButton setTitle:@"获取验证码" forState:UIControlStateNormal];
            [getCodeButton setTitle:@"获取验证码" forState:UIControlStateHighlighted];
        });
    } else {
        dispatch_async(dispatch_get_main_queue(), ^{
            getCodeButton.backgroundColor = [UIColor lightGrayColor];
            getCodeButton.userInteractionEnabled = NO;
            [getCodeButton setTitle:[NSString stringWithFormat:@"%d", timeout] forState:UIControlStateNormal];
        });
            
        timeout--;
    }
});
    
dispatch_resume(_timer);

猜你喜欢

转载自eric-gao.iteye.com/blog/2223674
今日推荐