发送验证码后计时

时间:2021-12-30 21:59:29

//计时器发送验证码. myButton为发送验证码的按键

-(void)sentPhoneCodeTimeMethodWithButton:(UIButton *)myButton{

    //倒计时时间 - 60

    __blockNSInteger timeOut = 59;

    //执行队列

    dispatch_queue_t queue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

    //计时器 -dispatch_source_set_timer自动生成

    dispatch_source_t timer =dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER,0, 0, queue);

    dispatch_source_set_timer(timer,DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC,0 * NSEC_PER_SEC);

    dispatch_source_set_event_handler(timer, ^{

        if (timeOut <=0) {

            dispatch_source_cancel(timer);

            //主线程设置按钮样式-

            dispatch_async(dispatch_get_main_queue(), ^{

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

                [myButton setUserInteractionEnabled:YES];

            });

        }else{

            //开始计时

            //剩余秒数 seconds

            NSInteger seconds = timeOut %60;

            NSString *strTime = [NSStringstringWithFormat:@"%.1ld",seconds];

            //主线程设置按钮样式

            dispatch_async(dispatch_get_main_queue(), ^{

                [UIViewbeginAnimations:nilcontext:nil];

                [UIViewsetAnimationDuration:1.0];

                [myButton setTitle:[NSStringstringWithFormat:@"%@S后重新发送",strTime]forState:UIControlStateNormal];

                [UIViewcommitAnimations];

                //计时器件不允许点击

                [myButton setUserInteractionEnabled:NO];

            });

            timeOut--;

        }

    });

    dispatch_resume(timer);

}