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

2025-05-29 0 18

方法一:

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34
-(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文件如下

?

1

2

3

4

5

6
#import <UIKit/UIKit.h>

@interface UIButton (XSCountDown)

- (void)xs_beginCountDownWithDuration:(NSTimeInterval)duration;

- (void)xs_stopCountDown;

@end

.m文件如下

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44
#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了

?

1
[self.verifyBt xs_beginCountDownWithDuration:60.0];

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

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 iOS获取短信验证码倒计时的两种实现方法 https://www.kuaiidc.com/90608.html

相关文章

发表评论
暂无评论