iOS获取短信验证码倒计时的两种实现方法
方法一:
网上用的很多的一种,不多说,直接上代码.
-(void)startTime{ __blockinttimeout=60;//倒计时时间 dispatch_queue_tqueue=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(),^{ [self.getIdentifyCodeBtsetTitle:@"获取验证码"forState:UIControlStateNormal]; self.getIdentifyCodeBt.userInteractionEnabled=YES; [self.getIdentifyCodeBtsetTitleColor:THEME_REDforState:UIControlStateNormal]; self.getIdentifyCodeBt.backgroundColor=[UIColorwhiteColor]; self.getIdentifyCodeBt.layer.borderColor=THEME_RED.CGColor; }); }else{ dispatch_async(dispatch_get_main_queue(),^{ [UIViewbeginAnimations:nilcontext:nil]; [UIViewsetAnimationDuration:1]; [self.getIdentifyCodeBtsetTitle:[NSStringstringWithFormat:@"%zd秒后失效",timeout]forState:UIControlStateNormal]; [self.getIdentifyCodeBtsetTitleColor:[UIColorwhiteColor]forState:UIControlStateNormal]; self.getIdentifyCodeBt.backgroundColor=[UIColorlightGrayColor]; self.getIdentifyCodeBt.layer.borderColor=[UIColorclearColor].CGColor; self.getIdentifyCodeBt.clipsToBounds=YES; [UIViewcommitAnimations]; self.getIdentifyCodeBt.userInteractionEnabled=NO; }); timeout--; } }); dispatch_resume(_timer); }
到时直接调用就可以了。
方法二:利用分类
给UIButton新建一个分类
.h文件如下
#import@interfaceUIButton(XSCountDown) -(void)xs_beginCountDownWithDuration:(NSTimeInterval)duration; -(void)xs_stopCountDown; @end
.m文件如下
#import"UIButton+XSCountDown.h" #import"ThemeColor.h" staticNSTimer*_countTimer; staticNSTimeInterval_count; staticNSString*_title; @implementationUIButton(XSCountDown) -(void)xs_beginCountDownWithDuration:(NSTimeInterval)duration{ _title=self.titleLabel.text; _count=duration; _countTimer=[NSTimerscheduledTimerWithTimeInterval:1.0target:selfselector:@selector(xs_updateTitle)userInfo:nilrepeats:YES]; [[NSRunLoopmainRunLoop]addTimer:_countTimerforMode:NSRunLoopCommonModes]; self.userInteractionEnabled=NO; [selfsetTitleColor:[UIColorwhiteColor]forState:UIControlStateNormal]; self.backgroundColor=[UIColorlightGrayColor]; self.layer.borderColor=[UIColorclearColor].CGColor; self.clipsToBounds=YES; } -(void)xs_stopCountDown{ [_countTimerinvalidate]; _countTimer=nil; _count=60.0; [selfsetTitle:_titleforState:UIControlStateNormal]; self.userInteractionEnabled=YES; } -(void)xs_updateTitle{ NSString*countString=[NSStringstringWithFormat:@"%lis后失效",(long)_count-1]; self.userInteractionEnabled=NO; [selfsetTitle:countStringforState:UIControlStateNormal]; if(_count--<=1.0){ [selfxs_stopCountDown]; [selfsetTitleColor:THEME_REDforState:UIControlStateNormal]; self.backgroundColor=[UIColorwhiteColor]; self.layer.borderColor=THEME_RED.CGColor; } } @end
然后在controller里直接调用分类.h文件里的方法就ok了
[self.verifyBtxs_beginCountDownWithDuration:60.0];
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。