iOS-实现验证码倒计时功能(1)
验证码倒计时按钮的应用是非常普遍的,该Blog就和你一起来写一个IDCountDownButton来实现验证码倒计时的效果。你可以想使用普通的UIButton类型按钮一样,只需要设置其倒计时时长(若未设置,默认为60秒),就可以轻松的实现点击countDownButton开始倒计时,倒计时结束方可重新点击。
一、实现效果
如图
二、实现思路
1、自定义一个IDCountDownButton,重写 beginTrackingWithTouch:withEvent: 拦截button的点击事件,根据是否正在倒计时决定是否响应并传递button的点击事件(若倒计时正在进行中,再次点击不会重新开始倒计时)
2、是用NSTimer定时器,定时改变IDCountDownButton的title
3、若倒计时结束,取消定时器并回复倒计时时长(使IDCountDownButton具备再次开始倒计时的能力)
4、在IDCountDownButton销毁时,同样取消定时器
三、实现步骤
1、添加相关的属性
公有属性(public)
1
2
3
4
|
@interface IDCountDownButton : UIButton
/** 验证码倒计时的时长 */
@property (nonatomic, assign) NSInteger durationOfCountDown;
@end
|
私有属性
1
2
3
4
5
6
7
8
|
@interface IDCountDownButton ()
/** 保存倒计时按钮的非倒计时状态的title */
@property (nonatomic, copy) NSString *originalTitle;
/** 保存倒计时的时长 */
@property (nonatomic, assign) NSInteger tempDurationOfCountDown;
/** 定时器对象 */
@property (nonatomic, strong) NSTimer *countDownTimer;
@end
|
2、重写setter
title属性的setter
1)、私有属性originalTitle用来暂存开始计时前button的标题,即用户设置的button的标题,通常是“获取验证码”
2)、需要屏蔽计时过程中,title更新时改变originalTitle的值
1
2
3
4
5
6
7
|
- ( void )setTitle:(NSString *)title forState:(UIControlState)state {
[super setTitle:title forState:state];
// 倒计时过程中title的改变不更新originalTitle
if (self.tempDurationOfCountDown == self.durationOfCountDown) {
self.originalTitle = title;
}
}
|
durationOfCountDown属性的setter
1)、设置tempDurationOfCountDown的值
2)、tempDurationOfCountDown的作用:倒计时;与durationOfCountDown配合判断当前IDCountDownButton是否具备重新开始倒计时的能力
1
2
3
4
|
- ( void )setDurationOfCountDown:(NSInteger)durationOfCountDown {
_durationOfCountDown = durationOfCountDown;
self.tempDurationOfCountDown = _durationOfCountDown;
}
|
初始化
1)、设置倒计时的默认时长为60妙
2)、设置IDCountDownButton默认的title为“获取验证码”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
// 设置默认的倒计时时长为60秒
self.durationOfCountDown = 60;
// 设置button的默认标题为“获取验证码”
[self setTitle:@ "获取验证码" forState:UIControlStateNormal];
}
return self;
}
- (instancetype)initWithCoder:(NSCoder *)aDecoder {
if (self = [super initWithCoder:aDecoder]) {
// 设置默认的倒计时时长为60秒
self.durationOfCountDown = 60;
// 设置button的默认标题为“获取验证码”
[self setTitle:@ "获取验证码" forState:UIControlStateNormal];
}
return self;
}
|
拦截IDCountDownButton的点击事件,判断是否开始倒计时
1)、若tempDurationOfCountDown等于durationOfCountDown,说明未开始倒计时,响应并传递IDCountDownButton的点击事件;否则,不响应且不传递。
1
2
3
4
5
6
7
8
9
|
- ( BOOL )beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {
// 若正在倒计时,不响应点击事件
if (self.tempDurationOfCountDown != self.durationOfCountDown) {
return NO;
}
// 若未开始倒计时,响应并传递点击事件,开始倒计时
[self startCountDown];
return [super beginTrackingWithTouch:touch withEvent:event];
}
|
倒计时
1)、创建定时器,开始倒计时
1
2
3
4
5
6
|
- ( void )startCountDown {
// 创建定时器
self.countDownTimer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(updateIDCountDownButtonTitle) userInfo:nil repeats:YES];
// 将定时器添加到当前的RunLoop中(自动开启定时器)
[[NSRunLoop currentRunLoop] addTimer:self.countDownTimer forMode:NSRunLoopCommonModes];
}
|
2)、更新IDCountDownButton的title为倒计时剩余的时间
1
2
3
4
5
6
7
8
9
10
11
12
|
- ( void )updateIDCountDownButtonTitle {
if (self.tempDurationOfCountDown == 0) {
// 设置IDCountDownButton的title为开始倒计时前的title
[self setTitle:self.originalTitle forState:UIControlStateNormal];
// 恢复IDCountDownButton开始倒计时的能力
self.tempDurationOfCountDown = self.durationOfCountDown;
[self.countDownTimer invalidate];
} else {
// 设置IDCountDownButton的title为当前倒计时剩余的时间
[self setTitle:[NSString stringWithFormat:@ "%zd秒" , self.tempDurationOfCountDown--] forState:UIControlStateNormal];
}
}
|
3)、移除定时器
1
2
3
|
- ( void )dealloc {
[self.countDownTimer invalidate];
}
|
使用示例
1)、添加vertificationCodeIDCountDownButton属性
1
2
3
4
|
@interface ViewController ()
/** 验证码倒计时的button */
@property (nonatomic, strong) IDCountDownButton *vertificationCodeIDCountDownButton;
@end
|
2)、创建vertificationCodeIDCountDownButton并进行相关设置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
- ( void )viewDidLoad {
[super viewDidLoad];
// 创建vertificationCodeIDCountDownButton
self.vertificationCodeIDCountDownButton = [[IDCountDownButton alloc] initWithFrame:CGRectMake(160, 204, 120, 44)];
// 添加点击事件
[self.vertificationCodeIDCountDownButton addTarget:self action:@selector(vertificationCodeIDCountDownButtonClick:) forControlEvents:UIControlEventTouchUpInside];
// 设置标题相关属性
[self.vertificationCodeIDCountDownButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[self.vertificationCodeIDCountDownButton setTitle:@ "获取验证码" forState:UIControlStateNormal];
// 设置背景图片
[self.vertificationCodeIDCountDownButton setBackgroundImage:[UIImage imageNamed:@ "redButton" ] forState:UIControlStateNormal];
// 设置倒计时时长
self.vertificationCodeIDCountDownButton.durationOfCountDown = 10;
// 将vertificationCodeIDCountDownButton添加的控制器的view中
[self.view addSubview:self.vertificationCodeIDCountDownButton];
}
|
3)、实现点击事件触发的操作
1
2
3
|
- ( void )vertificationCodeIDCountDownButtonClick:(UIButton *)button {
// TODO:调用服务器接口,获取验证码
}
|
四、关于AppIcon
添加AppIcon时需要遵循以下规则
1)、命名,以Icon开头(首字母大写),跟上@2x/@3x,如图:
2)、尺寸,必须按要求设置尺寸,如图
3)、图中所示的60pt对应的图片尺寸是
2x:120px X 120px
3x:180px X 180px
以上就是本文的全部内容,希望对大家的学习有所帮助。
转载于:https://www.cnblogs.com/AnnieBabygn/p/5462153.html
iOS-实现验证码倒计时功能(1)相关推荐
- Axure9 实现点击获取验证码倒计时功能
此文章帮助大家实现App的点击获取验证码的倒计时功能. 1:创建按钮和全局变量: 拖入一个矩形,创建全局变量Time=60. 在项目里面就可以找到创建全局变量的地方. 2:添加点击事件: (1):添加 ...
- jq 实现发送验证码倒计时功能
var util = { wait:60, hsTime: function (that) { _this = this; if (_this.wait == 0) { $('#hsbtn').rem ...
- 获取手机验证码倒计时功能
倒计时: 例如:登录页面获取手机验证码登录 代码: /* text:'获取验证码' => 按钮的初始展示样式是获取验证码 disabled:false, => 是否禁用按钮 防止用户在短时 ...
- android 获取验证码倒计时
在开发时,登陆注册时必有的模块,下面是记录一下注册时获取验证码的方法:效果图如下: 获取验证码后,进入倒计时并且是不可点击的状态. 1.复制下面工具类到项目中 import android.graph ...
- ios nstimer实现延时_IOS_IOS开发代码分享之用nstimer实现倒计时功能,用nstimer实现倒计时功能,废话 - phpStudy...
IOS开发代码分享之用nstimer实现倒计时功能 用nstimer实现倒计时功能,废话不多说,直接上代码,详细解释请参照注释 // [NSTimer scheduledTimerWithTimeIn ...
- 简单实现vue验证码60秒倒计时功能
简单实现vue验证码60秒倒计时功能 <span v-if="codeShow" @click="getPhoneCode">点击获取验证码< ...
- 手机短信验证码登录功能的开发实录(机器识别码、短信限流、错误提示、发送验证码倒计时60秒)
短信验证码登录功能 项目分析 核心代码 1.外部js库调用 2.HTML容器构建 3.javaScript业务逻辑验证 4.后端验证逻辑 总结 短信验证码是通过发送验证码到手机的一种有效的验证码系统, ...
- android自定义秒表,Android自定义Chronometer实现短信验证码秒表倒计时功能
本文实例为大家分享了Chronometer实现倒计时功能,Android提供了实现按照秒计时的API,供大家参考,具体内容如下 一.自定义ChronometerView 继续自TextView 主要原 ...
- android 短信验证计时,Android自定义Chronometer实现短信验证码秒表倒计时功能
本文实例为大家分享了chronometer实现倒计时功能,android提供了实现按照秒计时的api,供大家参考,具体内容如下 一.自定义chronometerview 继续自textview 主要原 ...
最新文章
- python nltk book_NLTK学习笔记(一):语言处理和Python
- Another hard to gain financial feedback 又是一个融不到资金的创业项目
- Java 中按文件名称分类,按文件大小分类,按照文件类型分类,按照最后修改时间分类的工具类
- 解决flex打包成exe之后不能升级的问题
- Python 如何从字符串中提取 URL 链接
- Splice Beatmaker for Mac(音乐节拍工具)
- java游戏开发入门(一) - HelloWorld
- 计算机网络知识之交换机、路由器、网关、MAC地址
- java项目包名理解
- Python爬取BOSS直聘商业分析岗职位描述信息
- java excel合并,Java Excel合并工具
- 以太智云赋能游戏产业,打造长沙顶尖NFT游戏开发平台,实现边玩边赚
- 按键精灵:函数之可选参数
- 白月黑羽python+selenium之SMS系统的练习
- python---A*搜索算法解决八数码问题
- 蓝桥杯官网python组基础练习-入门01-04
- 彻底明白IP地址如何计算相关地址【收藏】
- 计算机禁止共享上网,Win7 windows7网络共享设置及登录失败:禁用当前用户解决方法...
- 如何获得CISSP认证?权威流程
- excel高级筛选_Excel自动筛选还是高级筛选?
热门文章
- pandas to_sql
- CUDA TOOlkit Programming Guide 2. Programming Model
- matplotlib color 参数
- 前端-requests-flask对应关系 restful
- h5难做吗_还在担心H5太难做?介绍一个H5制作工具给你!
- cocos2dx arm64 jpg格式的不显示_如何导出CocosCreator项目供cocos2dx加载
- VMware vCenter升级杂谈
- 负载均衡 > 用户指南 > 证书管理 > 证书要求
- 自动化的NSX网络交付
- Linux学习总结(33)——Linux Java启动关闭bash脚本