美文网首页征服iOSiOS
iOS短信验证码倒计时Button的实现

iOS短信验证码倒计时Button的实现

作者: kysonyangs | 来源:发表于2015-07-13 07:02 被阅读5951次

    注:本人第一次在简书上发表文章,共勉


    Update 12-20 2016

    运行中,会一直走,但是真机推到后台不会变,如果需要实现同时,Google到一个(已测试):

    如果有好的方法也可以留言告诉我,不胜感激...

    CFAbsoluteTimestart =CFAbsoluteTimeGetCurrent();

    if((start -_time) >1.5&& [strTimeintValue] >1&& [strTimeintValue] <30) {

    intnum = (int)ceil(start -_time);

    timeout = timeout - num +1;

    strTime = [NSStringstringWithFormat:@"%zd", [strTimeintValue] - num];

    timeout--;

    if(timeout <0) {

    return;

    }

    }

    _time=CFAbsoluteTimeGetCurrent();

    加在

    NSLog(@"____%@", strTime);

    [_btnsetTitle:[NSStringstringWithFormat:@"%@",strTime]forState:UIControlStateNormal];

    _btn.backgroundColor= [UIColorgrayColor];

    _btn.userInteractionEnabled=NO;

    Update  07.15.2016

    亲测,退到后台在进入定时器仍然再走,时间对应减少!别再问了,最后提供一个Demo  ps: 亲们,遇到问题多动手,学习新知识,多动手!


    1.最终实现的鲜果如下图所示:

    2.主要是在Button的Event里面添加下列代码:

        - (IBAction)sendEvent:(id)sender {

    __block int timeout=30; //倒计时时间

    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(), ^{

    //设置界面的按钮显示 根据自己需求设置

    [_countdownButton setTitle:@"发送验证码" forState:UIControlStateNormal];

    _countdownButton.backgroundColor = [UIColor orangeColor];

    _countdownButton.userInteractionEnabled = YES;

    });

    }else{

    //            int minutes = timeout / 60;

    int seconds = timeout % 59;

    NSString *strTime = [NSString stringWithFormat:@"%.2d", seconds];

    dispatch_async(dispatch_get_main_queue(), ^{

    //设置界面的按钮显示 根据自己需求设置

    NSLog(@"____%@",strTime);

    [_countdownButton setTitle:[NSString stringWithFormat:@"%@",strTime] forState:UIControlStateNormal];

    _countdownButton.backgroundColor = [UIColor grayColor];

    _countdownButton.userInteractionEnabled = NO;

    });

    timeout--;

    }

    });

    dispatch_resume(_timer);

    }

    (Update  07.15.2016)(Update  07.15.2016)

    相关文章

      网友评论

        本文标题:iOS短信验证码倒计时Button的实现

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