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

}

posted @ 2016-03-29 15:02  sunflower-lhb  阅读(192)  评论(0编辑  收藏  举报