iOS 简单实现重新获取验证码并倒计时60秒

来源:互联网 发布:微信客服系统源码 编辑:程序博客网 时间:2024/05/20 07:19

@implementation ViewController

{

    UIButton * _receiveCheckNumButton;

}

- (void)viewDidLoad {

    [superviewDidLoad];

    _receiveCheckNumButton = [[UIButtonalloc] initWithFrame:CGRectMake(([UIScreenmainScreen].bounds.size.width - 100)/2,100, 100, 40 )];

    _receiveCheckNumButton.backgroundColor = [UIColorpurpleColor];

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

    [_receiveCheckNumButtonsetTitleColor:[UIColorwhiteColor] forState:UIControlStateNormal];

    _receiveCheckNumButton.titleLabel.font = [UIFontsystemFontOfSize:13];

    _receiveCheckNumButton.layer.cornerRadius =5;

    _receiveCheckNumButton.layer.masksToBounds =YES;

    _receiveCheckNumButton.alpha =0.3;

    [_receiveCheckNumButtonaddTarget:selfaction:@selector(receiveCheckNumButton)forControlEvents:UIControlEventTouchUpInside];

    [self.viewaddSubview:_receiveCheckNumButton];

}


//获取验证码倒计时

- (void)receiveCheckNumButton{

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

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

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

                    [_receiveCheckNumButtonsetTitle:@"重新获取"forState:UIControlStateNormal];

                    _receiveCheckNumButton.userInteractionEnabled =YES;

                    _receiveCheckNumButton.backgroundColor = [UIColorpurpleColor];

                });

            }else{

                int seconds = timeout;

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

                dispatch_async(dispatch_get_main_queue(), ^{

                    //让按钮变为不可点击的灰色

                    _receiveCheckNumButton.backgroundColor = [UIColorgrayColor];

                    _receiveCheckNumButton.userInteractionEnabled =NO;

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

                    [UIView beginAnimations:nil context:nil];

                    [UIView setAnimationDuration:1];

                    [_receiveCheckNumButtonsetTitle:[NSStringstringWithFormat:@"%@秒后重新发送",strTime]forState:UIControlStateNormal];

                    [UIView commitAnimations];

                });

                timeout--;

            }

        });

        dispatch_resume(_timer);

}




5 0
原创粉丝点击