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

2019-07-05  本文已影响0人  过江鸟iOSer

以前只是简单的做了下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

上一篇下一篇

猜你喜欢

热点阅读