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];
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。