iOS倒计时(两种实现方式)

释放双眼,带上耳机,听听看~!

今天项目中遇到获取验证码之后有一个倒计时功能的实现,百度了一下,有两种实现方式的,再次总结一下,以便日后需要查看,也方面其他的人查看,不多说了直接贴代码吧:

第一种:NSTimer

-在倒计时开始之后,让button处于一种不可点击的状态,直至倒计时结束。

[self.vCodeBtn setEnabled:NO];


count = 60;

NSTimer *time = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(openFire:) userInfo:nil repeats:YES];

-函数实现方法:

-(void)openFire:(NSTimer *)time


{

count--;

NSString *miao = [NSString stringWithFormat:@"%ld",(long)count];

[self.vCodeBtn setTitle:miao forState:0];

if (count == 1)

{

[self.vCodeBtn setTitle:@"Reacquire" forState:0];

[self.vCodeBtn setEnabled:YES];

[time invalidate];

}

}

 

第二种:使用GCD来实现:

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


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_release(_timer);

dispatch_async(dispatch_get_main_queue(), ^{

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

。。。。。。。。

});

}else{

int minutes = timeout / 60;

int seconds = timeout % 60;

NSString *strTime = [NSString stringWithFormat:@"%d分%.2d秒后重新获取验证码",minutes, seconds];

dispatch_async(dispatch_get_main_queue(), ^{

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

。。。。。。。。

});

timeout--;

}

});

dispatch_resume(_timer);

 

人已赞赏
iOS文章

iOS命令行自动打包(archive)

2020-1-1 14:14:36

iOS文章

CodeIgniter辅助函数helper详细解析

2020-1-1 16:04:43

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索