这篇文章主要介绍了iOS实现短信验证码倒计时功能,一种方法是利用NSTimer计时器,另一种方法是利用GCD实现短信验证码倒计时,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
在开发中,经常在需要用户注册的时候会需要实现验证码倒计时的功能,下面是解决这个问题的两种思路(使用UIButton控件)
一、利用NSTimer计时器
1.新建一个UIButton按钮,设置成属性,名为codeButton。(UIButton样式一定要为自定义,否则后面倒计时数秒时会出现闪烁现象)
2.定义一个NSTimer的属性,名为timer,同时定义一个用于计时的int变量time,设置初始值为60。
//启动一个定时器
self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(operatePerSecond) userInfo:nil repeats:YES];
//实现定时器中的方法
- (void)operatePerSecond {
if (time == 1) {
[self.timer invalidate];
time = 60;
[self.codeButton setTitle:@"重新获取" forState:UIControlStateNormal];
self.codeButton.tintColor = [UIColor blackColor];
self.codeButton.enabled = YES;
}else {
time --;
[self.codeButton setTitle:[NSString stringWithFormat:@"%ds" ,time] forState:UIControlStateNormal];
}
}
3.此时主要逻辑已经完成,但要记得:在本页面即将消失的时候也要停掉计时器self.timer。
二、利用GCD实现
1.定义一个用于计时的time(此时要用block修饰)--- block int time = 60;
//倒计时时间
__block int timeout = 60;
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_TIME_NOW, 1.0 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);
dispatch_source_set_event_handler(timer, ^{
if(timeout == 1){
//倒计时结束,关闭
dispatch_source_cancel(timer);
dispatch_async(dispatch_get_main_queue(), ^{
timeout = 60;
[self.codeButton setTitle:@"重新获取" forState:UIControlStateNormal];
self.codeButton.tintColor = [UIColor blackColor];
self.codeButton.enabled = YES;
});
}else{
NSString *strTime = [NSString stringWithFormat:@"%ds",timeout];
dispatch_async(dispatch_get_main_queue(), ^{
[self.codeButton setTitle:strTime forState:UIControlStateNormal];
});
timeout--;
}
});
dispatch_resume(timer);
2.把上述代码写入点击方法中即可实现倒计时效果。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程学习网。
沃梦达教程
本文标题为:iOS实现短信验证码倒计时
猜你喜欢
- 详解flutter engine 那些没被释放的东西 2022-12-04
- SurfaceView播放视频发送弹幕并实现滚动歌词 2023-01-02
- Flutter实现底部和顶部导航栏 2022-08-31
- iOS 对当前webView进行截屏的方法 2023-03-01
- Android实现轮询的三种方式 2023-02-17
- Android实现监听音量的变化 2023-03-30
- Android studio实现动态背景页面 2023-05-23
- 最好用的ios数据恢复软件:PhoneRescue for Mac 2023-09-14
- 作为iOS开发,这道面试题你能答出来,说明你基础很OK! 2023-09-14
- Android MaterialButton使用实例详解(告别shape、selector) 2023-06-16
