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);
}
本功能可以采用两种方法,一种是采用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);
}
相关文章推荐
- IOS消息推送之APNS
- IOS7 点击空白处隐藏键盘的几种方法
- iOS数据持久化
- iOS沙盒目录,Documents、Library、tmp
- [IOS]edgesForExtendedLayout、automaticallyAdjustsScrollViewInsets
- iOS开发多线程篇—线程安全
- iOS开发的22个奇葩技巧
- 用Ranorex进行安卓IOS自动化测试
- iOS沙盒机制
- [iOS基础]关于Mail的一切
- iOS开发多线程篇—创建线程
- iOS加密之MD5加密
- iOS的主要框架介绍
- iOS 心得十 按钮添加长按手势
- iOS 域名解析ip(解析)
- ios开发是更加“省时”的编程方式
- iOS界面-仿网易新闻左侧抽屉式交互
- iOS9适配常见问题
- iOS 7中自动布局教程(一)
- jpush(极光)推送之 IOS 篇