本篇文章主要介绍了iOS获取短信验证码倒计时的两种实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
方法一:
网上用的很多的一种,不多说,直接上代码.
-(void)startTime{
__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_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.getIdentifyCodeBt setTitle:@"获取验证码" forState:UIControlStateNormal];
self.getIdentifyCodeBt.userInteractionEnabled = YES;
[self.getIdentifyCodeBt setTitleColor:THEME_RED forState:UIControlStateNormal];
self.getIdentifyCodeBt.backgroundColor = [UIColor whiteColor];
self.getIdentifyCodeBt.layer.borderColor = THEME_RED.CGColor;
});
}else{
dispatch_async(dispatch_get_main_queue(), ^{
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1];
[self.getIdentifyCodeBt setTitle:[NSString stringWithFormat:@"%zd秒后失效",timeout] forState:UIControlStateNormal];
[self.getIdentifyCodeBt setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
self.getIdentifyCodeBt.backgroundColor = [UIColor lightGrayColor];
self.getIdentifyCodeBt.layer.borderColor = [UIColor clearColor].CGColor;
self.getIdentifyCodeBt.clipsToBounds = YES;
[UIView commitAnimations];
self.getIdentifyCodeBt.userInteractionEnabled = NO;
});
timeout--;
}
});
dispatch_resume(_timer);
}
到时直接调用就可以了。
方法二:利用分类
给UIButton新建一个分类
.h文件如下
#import <UIKit/UIKit.h>
@interface UIButton (XSCountDown)
- (void)xs_beginCountDownWithDuration:(NSTimeInterval)duration;
- (void)xs_stopCountDown;
@end
.m文件如下
#import "UIButton+XSCountDown.h"
#import "ThemeColor.h"
static NSTimer *_countTimer;
static NSTimeInterval _count;
static NSString *_title;
@implementation UIButton (XSCountDown)
- (void)xs_beginCountDownWithDuration:(NSTimeInterval)duration {
_title = self.titleLabel.text;
_count = duration;
_countTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(xs_updateTitle) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:_countTimer forMode:NSRunLoopCommonModes];
self.userInteractionEnabled = NO;
[self setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
self.backgroundColor = [UIColor lightGrayColor];
self.layer.borderColor = [UIColor clearColor].CGColor;
self.clipsToBounds = YES;
}
- (void)xs_stopCountDown {
[_countTimer invalidate];
_countTimer = nil;
_count = 60.0;
[self setTitle:_title forState:UIControlStateNormal];
self.userInteractionEnabled = YES;
}
- (void)xs_updateTitle {
NSString *countString = [NSString stringWithFormat:@"%lis 后失效", (long)_count - 1];
self.userInteractionEnabled = NO;
[self setTitle:countString forState:UIControlStateNormal];
if (_count-- <= 1.0) {
[self xs_stopCountDown];
[self setTitleColor:THEME_RED forState:UIControlStateNormal];
self.backgroundColor = [UIColor whiteColor];
self.layer.borderColor = THEME_RED.CGColor;
}
}
@end
然后在controller里直接调用分类.h文件里的方法就ok了
[self.verifyBt xs_beginCountDownWithDuration:60.0];
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程学习网。
沃梦达教程
本文标题为:iOS获取短信验证码倒计时的两种实现方法
基础教程推荐
猜你喜欢
- 详解ios11中estimatedRowHeight属性 2023-04-24
- iOS如何去掉导航栏(UINavigationBar)下方的横线 2023-03-07
- Android socket如何实现文件列表动态访问 2023-04-05
- Android自定义View验证码输入框 2023-02-04
- 如何在iOS中高效的加载图片详解 2023-07-02
- Android自定义View实现地铁显示牌效果 2023-01-01
- iOS输入框的字数统计/最大长度限制详解 2023-06-03
- android: targetSdkVersion升级中Only fullscreen activities can request orientation问题的解决方法 2022-11-05
- Android Kotlin使用SQLite案例详解 2023-04-16
- Android Studio实现下拉列表效果 2023-05-23
