• iOS 60秒倒计时 发送验证码


    #import "ViewController.h"

     

    @interface ViewController ()

    {

        UIButton *_button;

        __block int timeout;

    }

     

    @end

     

    @implementation ViewController

     

     

    - (void)viewDidLoad {

        [super viewDidLoad];

        

        _button = [UIButton buttonWithType:UIButtonTypeCustom];

        _button.frame = CGRectMake(0, 0, 100, 30);

        _button.center = self.view.center;

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

        [_button setBackgroundColor:[UIColor purpleColor]];

       

        _button.layer.cornerRadius = 5;

        _button.clipsToBounds = YES;

        [_button addTarget:self action:@selector(verificationCodeCountDown) forControlEvents:UIControlEventTouchUpInside];

        

        [self.view addSubview:_button];

        

    }

    - (void)verificationCodeCountDown

    {

        __block NSString *strTime = [[NSString alloc] init];

        //验证码倒计时

        timeout=10; //倒计时时

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

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

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

                    _button.userInteractionEnabled = YES;

                });

            }else{

                int seconds = timeout % 120;

                if (seconds == 0) {

                    strTime = [NSString stringWithFormat:@"%d",timeout];

                }

                else {

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

                }

                dispatch_async(dispatch_get_main_queue(), ^{

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

                    [_button setTitle:[NSString stringWithFormat:@"%@",strTime] forState:UIControlStateNormal];

                    _button.userInteractionEnabled = NO;

                    NSLog(@"倒计时%@",strTime);

                });

                timeout--;

                

            }

        });

        dispatch_resume(_timer);

    }

  • 相关阅读:
    老陌与博客
    有关模式窗体和无(非)模式窗体的区别
    10月9日至10月22日备忘录
    9月4日至9月10日备忘录
    VS2015 远程调试:Remote Debugger
    8月28日至9月3日备忘录
    8月21日至8月27日技术积累
    用函数方法实现迭代器
    python中eval, exec, execfile,和compile(转载)
    dev 中的GridControl中的行实现选择的功能实现
  • 原文地址:https://www.cnblogs.com/sunflower-lhb/p/5333031.html
Copyright © 2020-2023  润新知