您的位置:首页 > 移动开发 > IOS开发

IOS短信验证码倒计时添加

2015-11-11 16:27 489 查看
IOS短信验证码倒计时添加

本功能可以采用两种方法,一种是采用NSTimer计时器,另一种是使用GCD来实现

第一种方法:采用NSTimer计时器

1、定义两个全局变量

//倒计时计数器

int timeTick;

//定义一个定时器

NSTimer *timer;

2、在timeAccoutBtn按钮的点击事件中给倒计时计数器赋倒数初值,并用scheduledtTimerWithTimeInterval方法初始化计时器,每隔1秒钟之行一次timeFireMethod方法

//timeAccoutBtn倒数计时按钮的事件

- (IBAction)timeAccoutAction:(UIButton *)sender {

//60秒倒计时,timeTick需设置为61

timeTick = 60;

//给计时器添加1秒钟到后要执行的方法(timeFireMethod)

timer=[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timeFireMethod) userInfo:nil repeats:YES];

_timeAccoutBtn.enabled = NO;

}

3、在timeFireMethod方法中进行倒计时的操作,倒计时完成后再把计时器释放,即调用NStimer的invalidate方法

//计时器每隔一秒钟要执行的方法

-(void)timeFireMethod

{

timeTick--;

if(timeTick==0){

[timer invalidate];

_timeAccoutBtn.enabled = YES;

[_timeAccoutBtn setTitle:@"获取验证码" forState:UIControlStateNormal];

}else

{

NSString *str = [NSString stringWithFormat:@"%d秒后重新发送",timeTick];

[_timeAccoutBtn setTitle:str forState:UIControlStateNormal];

}

}

第二种方法:实用GCD

1、在timeBtn倒数计时的点击事件中使用多线程进行倒计时及相关的事件处理

//timeBtn倒数计时按钮的事件

- (IBAction)timeAction:(UIButton *)sender {

__block int timeout=59; //倒计时时间

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(), ^{

//设置界面的按钮显示 根据自己需求设置

[_timeBtn setTitle:@"发送验证码" forState:UIControlStateNormal];

_timeBtn.userInteractionEnabled = YES;

});

}else{

int seconds = timeout % 60;

NSString *strTime = [NSString stringWithFormat:@"%.2d", seconds];

dispatch_async(dispatch_get_main_queue(), ^{

//设置界面的按钮显示 根据自己需求设置

//NSLog(@"____%@",strTime);

[UIView beginAnimations:nil context:nil];

[UIView setAnimationDuration:1];

[_timeBtn setTitle:[NSString stringWithFormat:@"%@秒后重新发送",strTime] forState:UIControlStateNormal];

[UIView commitAnimations];

_timeBtn.userInteractionEnabled = NO;

});

timeout--;

}

});

dispatch_resume(_timer);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: