首页 > 系统 > iOS > 正文

iOS获取短信验证码倒计时的两种实现方法

2019-10-21 18:46:26
字体:
来源:转载
供稿:网友

方法一:

网上用的很多的一种,不多说,直接上代码.

-(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];

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VEVB武林网。


注:相关教程知识阅读请移步到IOS开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表