#import <UIKit/UIKit.h> @interface UIButton (CountDown) + (void)startRunSecond:(UIButton *)btn stringFormat:(NSString *)str finishBlock:(dispatch_block_t)finish; + (void)startRunSecond:(UIButton *)btn restOfCode:(NSInteger)restOfCode stringFormat:(NSString *)str finishBlock:(dispatch_block_t)finish; @end
#import "UIButton+CountDown.h" @implementation UIButton (CountDown) + (void)startRunSecond:(UIButton *)btn stringFormat:(NSString *)str finishBlock:(dispatch_block_t)finish { [self startRunSecond:btn restOfCode:60 stringFormat:str finishBlock:finish]; } + (void)startRunSecond:(UIButton *)btn restOfCode:(NSInteger)restOfCode stringFormat:(NSString *)str finishBlock:(dispatch_block_t)finish { if (restOfCode <= 0) return; __block NSInteger timeout = restOfCode; //倒计时时间 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(), ^{ //设置界面的按钮显示 根据自己需求设置 if (finish) { finish(); } }); }else{ int seconds = timeout % 61; NSString *strTime = [NSString stringWithFormat:@"%.2d", seconds]; dispatch_async(dispatch_get_main_queue(), ^{ //设置界面的按钮显示 根据自己需求设置 //NSLog(@"____%@",strTime); [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:1]; [btn setTitle:[NSString stringWithFormat:str,strTime] forState:UIControlStateNormal]; [UIView commitAnimations]; btn.enabled = NO; }); timeout--; } }); dispatch_resume(_timer); } @end
func setForTheRestOfVerificationCode(time:Int) {
UIButton.startRunSecond(verificationCodeButton, restOfCode: time, stringFormat: "%@s") {[weak self] in
guard let self = self else{ return }
self.verificationCodeButton.isEnabled = true
self.verificationCodeButton.setTitle("重新获取", for: .normal)
}
}
原文:https://www.cnblogs.com/kingstudy/p/11587492.html