iOS开发

iOS 验证码倒计时

2018-09-07  本文已影响2人  风规自远

/**

 倒计时方法 在点击获取验证码按钮的方法里调用此方法即可实现, 需要在倒计时里修改按钮相关的请在此方法里yourButton修改

 */

+ (void)sentPhoneCodeTimeMethod:(UIButton*)btn {

    //倒计时时间 - 60S

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

                // 倒计时结束

                [btnsetBackgroundColor:ZTCOLOR];

                [btnsetTitle:@"重发验证码"forState:UIControlStateNormal];

                [btnsetTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

                [btnsetEnabled:YES];

                [btnsetUserInteractionEnabled:YES];

            });

        }else{

            //开始计时

            //剩余秒数 seconds

            NSIntegerseconds = timeOut %60;

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

            //主线程设置按钮样式

            dispatch_async(dispatch_get_main_queue(), ^{

                [UIView beginAnimations:nil context:nil];

                [UIView setAnimationDuration:1.0];

                NSString*title = [NSStringstringWithFormat:@"%@",strTime];

                [btnsetTitle:title forState:UIControlStateNormal];

                [btnsetContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];

                [btnsetTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

                [btnsetBackgroundColor:RGBACOLOR(212,212,212,1)];

                [UIView commitAnimations];

                //计时器间不允许点击

                [btnsetUserInteractionEnabled:NO];

            });

            timeOut--;

        }

    });

    dispatch_resume(timer);

}

上一篇下一篇

猜你喜欢

热点阅读