美文网首页
GCD实现验证码倒计时

GCD实现验证码倒计时

作者: 一只浩子 | 来源:发表于2017-07-15 16:29 被阅读0次
    verifyCode.gif

    1 . 新增UIButton的分类UIButton+Categroy 代码如下:

    - (void)startTime:(NSInteger)time countDownTitle:(NSString *)countDownTitle;
    {
        __block NSInteger timeout = time; // 倒计时时间
        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(), ^{
                    // 设置界面的按钮显示
                    [self setTitle:@"获取验证码" forState:UIControlStateNormal];
                    [self setTitleColor:COLOR_GREEN forState:UIControlStateNormal];
                    self.enabled = YES;
                    self.layer.borderColor = COLOR_GREEN.CGColor;
                });
            } else {
                NSInteger seconds = timeout;
                NSString *strTime = [NSString stringWithFormat:@"%2ld", seconds];
                dispatch_async(dispatch_get_main_queue(), ^{
                    [self setTitle:[NSString stringWithFormat:@"%@ %@s",countDownTitle,strTime] forState:UIControlStateNormal];
                    self.enabled = NO;
                    [self setTitleColor:Color_Assist_one forState:UIControlStateNormal];
                    self.layer.borderColor = Color_Assist_one.CGColor;
                });
                timeout--;
            }
        });
        dispatch_resume(_timer);
    }
    

    2 . 代码实现

    [button startTime:60 countDownTitle:@"重新获取"];```
    
    GCD与NSTimer 实现本质区别可以阅读这篇文章 [IOS定时器,你真的会用吗?](http://www.jianshu.com/p/c167ca4d1e7e?open_source=weibo_search)
    
    [Demo地址](https://github.com/lebronjames-zh/ZHVerifyCodeCountDown)

    相关文章

      网友评论

          本文标题:GCD实现验证码倒计时

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