iOS GCD实现获取验证码的倒计时

来源:互联网 发布:js 时间范围选择控件 编辑:程序博客网 时间:2024/05/20 00:12

//联系人:石虎  QQ: 1224614774昵称:嗡嘛呢叭咪哄

//倒计时按钮

@property(nonatomic,strong)UIButton *btnCountdown;


// GCD实现倒计时功能

- (void)btnCountdownClick{

  

    //倒计时默认状体

    [_btnCountdownsetTitle:@"重发(60s)"forState:UIControlStateNormal];

    //倒计时时间

    __blockint timeout=59;

    //倒计时全局队列

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

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

               _btnCountdown.userInteractionEnabled =YES;

                //设置倒计时标题

                [_btnCountdownsetTitle:@"获取验证码"forState:UIControlStateNormal];

                

            });

        }else{

            //去时间余

            int seconds = timeout %60;

            //拿到时间文字

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

            //回到主线程

            dispatch_async(dispatch_get_main_queue(), ^{

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

                [UIViewbeginAnimations:nilcontext:nil];

                //设置动画时间为1

                [UIViewsetAnimationDuration:1];

                //时间倒计时为0的时候显示重发?

                [_btnCountdownsetTitle:[NSStringstringWithFormat:@"重发(%@)",strTime]forState:UIControlStateNormal];

                

                [UIViewcommitAnimations];

                _btnCountdown.userInteractionEnabled =NO;

                

            });

            timeout--;

        }

    });

    

    dispatch_resume(_timer);


}


原创粉丝点击