美文网首页
验证码定时器Demo

验证码定时器Demo

作者: 飞向大海的菜鸟 | 来源:发表于2016-12-05 09:53 被阅读50次

在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);
}

相关文章

  • RAC实战3---定时器

    RAC中的定时器 这次我们写一个demo来讲解RAC中的定时器的使用。demo功能:点击button发送验证码,并...

  • 验证码定时器Demo

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

  • iOS 倒计时效果的实现

    // 添加定时器 // 倒计时操作 // 定时器的销毁 点击按钮获取验证码 注意:如果获取验证码的按钮是通过sb ...

  • [swift] 定时器封装

    开发中不可避免会用到注册获取验证码,在验证码定时器使用方面别出心裁,各有妙招,今天推荐一个比较实用的定时器使用方法...

  • iOS 短信验证码倒计时按钮

    级别: ★★☆☆☆标签:「iOS 验证码后台倒计时」「NSTimer后台运行」「iOS 定时器后台运行」作者: ...

  • flutter 定时器

    回调一次的定时器 周期性定时器(例如获取验证码) 注意 周期的可以内部取消,当然也可以外部取消

  • demo 验证码

  • Android开发中,定义验证码定时器

    android中验证码定时器 第一步,创建内部或外部引用类(这个自己随便,我用的是内部类) /* * 发送验证码倒...

  • iOS开发:浅谈子线程中添加定时器

    目标 开启一个子线程,并添加一个定时器,在进入界面时启动定时器,在退出界面时销毁定时器。 demo地址 https...

  • JavaScript数据驱动的定时器开关(可暂停)

    异常编程学 最近做了一个中央空调的demo,用了很多的定时器,而且又要关机/待机时暂停定时器,开机启动定时器什么的...

网友评论

      本文标题:验证码定时器Demo

      本文链接:https://www.haomeiwen.com/subject/wvskmttx.html