美文网首页
iOS倒计时的两种实现方式

iOS倒计时的两种实现方式

作者: 等不来的期待 | 来源:发表于2017-01-16 15:10 被阅读166次

    今天项目中遇到获取验证码之后有一个倒计时功能的实现,百度了一下,有两种实现方式的,再次总结一下,以便日后需要查看,也方面其他的人查看,不多说了直接贴代码吧:

    第一种:NSTimer

    -在倒计时开始之后,让button处于一种不可点击的状态,直至倒计时结束。

    [self.vCodeBtn setEnabled:NO];

    count = 60;

    NSTimer *time = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(openFire:) userInfo:nil repeats:YES];

    -函数实现方法:

    -(void)openFire:(NSTimer *)time

    {

    count--;

    NSString *miao = [NSString stringWithFormat:@"%ld",(long)count];

    [self.vCodeBtn setTitle:miao forState:0];

    if (count == 1)

    {

    [self.vCodeBtn setTitle:@"Reacquire" forState:0];

    [self.vCodeBtn setEnabled:YES];

    [time invalidate];

    }

    }

    第二种:使用GCD来实现:

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

    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_release(_timer);

    dispatch_async(dispatch_get_main_queue(), ^{

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

    。。。。。。。。

    });

    }else{

    int minutes = timeout / 60;

    int seconds = timeout % 60;

    NSString *strTime = [NSString stringWithFormat:@"%d分%.2d秒后重新获取验证码",minutes, seconds];

    dispatch_async(dispatch_get_main_queue(), ^{

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

    。。。。。。。。

    });

    timeout--;

    }

    });

    dispatch_resume(_timer);

    相关文章

      网友评论

          本文标题:iOS倒计时的两种实现方式

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