短信倒计时

86 阅读1分钟
#import "ViewController.h"

@interface ViewController ()<UITextFieldDelegate>

@property (nonatomic,strong) UIButton *verificationButton;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self.view addSubview:self.verificationButton];
}

- (UIButton *)verificationButton {
    if (!_verificationButton) {
        _verificationButton = [[UIButton alloc] init];
        _verificationButton.frame = CGRectMake(100, 100, 100, 30);
        _verificationButton.backgroundColor = [[UIColor redColor] colorWithAlphaComponent:0.1];
        [_verificationButton setTitle:@"获取验证码" forState:UIControlStateNormal];
        _verificationButton.titleLabel.font = [UIFont systemFontOfSize:14];
        _verificationButton.layer.cornerRadius = 15;
        _verificationButton.layer.masksToBounds = YES;
        [_verificationButton setTitleColor:[UIColor darkGrayColor] forState:UIControlStateNormal];
        _verificationButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
        [_verificationButton addTarget:self action:@selector(validationClick:) forControlEvents:UIControlEventTouchUpInside];
    }
    return _verificationButton;
}

#pragma mark - 验证点击
- (void)validationClick:(UIButton *)sender {
    __block NSInteger time = 59; //设置倒计时时间
    dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0));
    dispatch_source_set_timer(_timer,dispatch_walltime(NULL, 0),1.0 * NSEC_PER_SEC, 0); //每秒执行
    __weak typeof (self) weakSelf = self;
    dispatch_source_set_event_handler(_timer, ^{
        if(time <= 0){ //倒计时结束,关闭
            dispatch_source_cancel(_timer);
            dispatch_async(dispatch_get_main_queue(), ^{
                //设置按钮的样式
                [weakSelf.verificationButton setTitle:@"重新发送" forState:UIControlStateNormal];
                weakSelf.verificationButton.userInteractionEnabled = YES;
            });
        }else{
            NSInteger seconds = time % 60;
            dispatch_async(dispatch_get_main_queue(), ^{
                //设置按钮显示读秒效果
                [weakSelf.verificationButton setTitle:[NSString stringWithFormat:@"重新发送(%.2ld)", (long)seconds] forState:UIControlStateNormal];
                weakSelf.verificationButton.userInteractionEnabled = NO;
            });
            time--;
        }
    });
    dispatch_resume(_timer);
}

@end