验证码定时器Demo

在iOS应用开发中,有很多用到获取验证码的倒计时,所以可以写个Demo以方便后面使用。

  • 废话不多说,直接上代码
@implementation ViewController
{
    UIButton * _receiveCheckNumButton;
}
- (void)viewDidLoad {
    [super viewDidLoad];
    _receiveCheckNumButton = [[UIButton alloc] initWithFrame:CGRectMake(([UIScreen mainScreen].bounds.size.width - 100)/2, 100, 100, 40 )];
    _receiveCheckNumButton.backgroundColor = [UIColor purpleColor];
    [_receiveCheckNumButton setTitle:@"获取验证码" forState:UIControlStateNormal];
    [_receiveCheckNumButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    _receiveCheckNumButton.titleLabel.font = [UIFont systemFontOfSize:13];
    _receiveCheckNumButton.layer.cornerRadius = 5;
    _receiveCheckNumButton.layer.masksToBounds = YES;
    _receiveCheckNumButton.alpha = 0.3;
    [_receiveCheckNumButton addTarget:self action:@selector(receiveCheckNumButton) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:_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(), ^{
                //设置界面的按钮显示 根据自己需求设置
                [_receiveCheckNumButton setTitle:@"重新获取" forState:UIControlStateNormal];
                _receiveCheckNumButton.userInteractionEnabled = YES;
                _receiveCheckNumButton.backgroundColor = [UIColor purpleColor];
            });
        }else{
            int seconds = timeout;
            NSString *strTime = [NSString stringWithFormat:@"%.2d", seconds];
            dispatch_async(dispatch_get_main_queue(), ^{
                //让按钮变为不可点击的灰色
                _receiveCheckNumButton.backgroundColor = [UIColor grayColor];
                _receiveCheckNumButton.userInteractionEnabled = NO;
                //设置界面的按钮显示 根据自己需求设置
                [UIView beginAnimations:nil context:nil];
                [UIView setAnimationDuration:1];
                [_receiveCheckNumButton setTitle:[NSString stringWithFormat:@"%@秒后重发",strTime] forState:UIControlStateNormal];
                [UIView commitAnimations];
            });
            timeout--;
        }
    });
    dispatch_resume(_timer);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,842评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,262评论 4 61