美文网首页
ios计时器之短信验证码解决方案

ios计时器之短信验证码解决方案

作者: 过江鸟iOSer | 来源:发表于2019-07-05 17:09 被阅读0次

    以前只是简单的做了下NSTimer事件,没有考虑退到后台之类的情况。
    网上看有一些解决方案,只是觉得比较繁琐
    灵光一闪,如果不用手动计时每秒time--,而是用时间戳来计算,能实现比较理想的效果,代码如下:

    //点击发送短信验证码(开始计时)
    - (IBAction)act:(UIButton *)sender {
        _btn.userInteractionEnabled = NO;
    //60秒后可重新发送验证码,故保存60秒之后的时间
        _secondsNumber = [NSDate date].timeIntervalSince1970 + 60;
        [_timer invalidate];
        _timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(secondsAction) userInfo:nil repeats:YES];
        [[NSRunLoop mainRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes];
    }
    
    - (void)secondsAction {
    //点击发送短信后第60秒 与 当前时间做差,获取倒计时
        NSInteger now = [NSDate date].timeIntervalSince1970;
        if (_secondsNumber - now > 0) {
            _btn.userInteractionEnabled = NO;
            [_btn setTitle:[NSString stringWithFormat:@"重新发送(%lds)", (long)_secondsNumber - now] forState:UIControlStateNormal];
        } else {
            [_timer invalidate];
            _timer = nil;
            _btn.enabled = YES;
            _btn.userInteractionEnabled = YES;
            [_btn setTitle:@"重新获取" forState:UIControlStateNormal];
        }
    }
    

    不用考虑app进入后台timer不执行的问题,如果发现代码任何问题,欢迎评论指出b( ̄▽ ̄)d

    相关文章

      网友评论

          本文标题:ios计时器之短信验证码解决方案

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