GCD实现计时器

 UIButton *button = (UIButton *)[self viewWithTag:999];
            __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 <= 0) {
                    dispatch_source_cancel(_timer);
                    dispatch_async(dispatch_get_main_queue(), ^{
                        [button setTitle:@"获取短信" forState:UIControlStateNormal];
                        button.enabled = YES;
                        [button setTitleColor:[UIColor colorWithRed:20/255.0 green:130/255.0 blue:190/255.0 alpha:1.0] forState:UIControlStateNormal];
                    });
                } else {
                    int seconds = timeout;
                    NSString *strTime = [NSString stringWithFormat:@"%.2d",seconds];
                    dispatch_async(dispatch_get_main_queue(), ^{
                        button.enabled = NO;
                        [button setTitle:[NSString stringWithFormat:@"%@秒后获取",strTime] forState:UIControlStateDisabled];
                        [button setTitleColor:[UIColor lightGrayColor] forState:UIControlStateDisabled];
                    });
                    timeout --;
                }
            });
            dispatch_resume(_timer);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值