ios开发第一章之如何实现验证码倒计时功能
验证码倒计时按钮的应用是非常普遍的,该Blog就和你一起来写一个IDCountDownButton来实现验证码倒计时的效果。你可以想使用普通的UIButton类型按钮一样,只需要设置其倒计时时长(若未设置,默认为60秒),就可以轻松的实现点击countDownButton开始倒计时,倒计时结束方可重新点击。
一、实现效果
二、实现思路
1、自定义一个IDCountDownButton,重写beginTrackingWithTouch:withEvent:拦截button的点击事件,根据是否正在倒计时决定是否响应并传递button的点击事件(若倒计时正在进行中,再次点击不会重新开始倒计时)
2、是用NSTimer定时器,定时改变IDCountDownButton的title
3、若倒计时结束,取消定时器并回复倒计时时长(使IDCountDownButton具备再次开始倒计时的能力)
4、在IDCountDownButton销毁时,同样取消定时器
三、实现步骤
1、添加相关的属性
公有属性(public)
@interfaceIDCountDownButton:UIButton
/**验证码倒计时的时长*/
@property(nonatomic,assign)NSIntegerdurationOfCountDown;
@end
私有属性
@interfaceIDCountDownButton()
/**保存倒计时按钮的非倒计时状态的title*/
@property(nonatomic,copy)NSString*originalTitle;
/**保存倒计时的时长*/
@property(nonatomic,assign)NSIntegertempDurationOfCountDown;
/**定时器对象*/
@property(nonatomic,strong)NSTimer*countDownTimer;
@end
2、重写setter
title属性的setter
1)、私有属性originalTitle用来暂存开始计时前button的标题,即用户设置的button的标题,通常是“获取验证码”
2)、需要屏蔽计时过程中,title更新时改变originalTitle的值
-(void)setTitle:(NSString*)titleforState:(UIControlState)state{
[supersetTitle:titleforState:state];
//倒计时过程中title的改变不更新originalTitle
if(self.tempDurationOfCountDown==self.durationOfCountDown){
self.originalTitle=title;
}
}
durationOfCountDown属性的setter
1)、设置tempDurationOfCountDown的值
2)、tempDurationOfCountDown的作用:倒计时;与durationOfCountDown配合判断当前IDCountDownButton是否具备重新开始倒计时的能力
-(void)setDurationOfCountDown:(NSInteger)durationOfCountDown{
_durationOfCountDown=durationOfCountDown;
self.tempDurationOfCountDown=_durationOfCountDown;
}
初始化
1)、设置倒计时的默认时长为60妙
2)、设置IDCountDownButton默认的title为“获取验证码”
-(instancetype)initWithFrame:(CGRect)frame{
if(self=[superinitWithFrame:frame]){
//设置默认的倒计时时长为60秒
self.durationOfCountDown=60;
//设置button的默认标题为“获取验证码”
[selfsetTitle:@"获取验证码"forState:UIControlStateNormal];
}
returnself;
}
-(instancetype)initWithCoder:(NSCoder*)aDecoder{
if(self=[superinitWithCoder:aDecoder]){
//设置默认的倒计时时长为60秒
self.durationOfCountDown=60;
//设置button的默认标题为“获取验证码”
[selfsetTitle:@"获取验证码"forState:UIControlStateNormal];
}
returnself;
}
拦截IDCountDownButton的点击事件,判断是否开始倒计时
1)、若tempDurationOfCountDown等于durationOfCountDown,说明未开始倒计时,响应并传递IDCountDownButton的点击事件;否则,不响应且不传递。
-(BOOL)beginTrackingWithTouch:(UITouch*)touchwithEvent:(UIEvent*)event{
//若正在倒计时,不响应点击事件
if(self.tempDurationOfCountDown!=self.durationOfCountDown){
returnNO;
}
//若未开始倒计时,响应并传递点击事件,开始倒计时
[selfstartCountDown];
return[superbeginTrackingWithTouch:touchwithEvent:event];
}
倒计时
1)、创建定时器,开始倒计时
-(void)startCountDown{
//创建定时器
self.countDownTimer=[NSTimertimerWithTimeInterval:1target:selfselector:@selector(updateIDCountDownButtonTitle)userInfo:nilrepeats:YES];
//将定时器添加到当前的RunLoop中(自动开启定时器)
[[NSRunLoopcurrentRunLoop]addTimer:self.countDownTimerforMode:NSRunLoopCommonModes];
}
2)、更新IDCountDownButton的title为倒计时剩余的时间
-(void)updateIDCountDownButtonTitle{
if(self.tempDurationOfCountDown==0){
//设置IDCountDownButton的title为开始倒计时前的title
[selfsetTitle:self.originalTitleforState:UIControlStateNormal];
//恢复IDCountDownButton开始倒计时的能力
self.tempDurationOfCountDown=self.durationOfCountDown;
[self.countDownTimerinvalidate];
}else{
//设置IDCountDownButton的title为当前倒计时剩余的时间
[selfsetTitle:[NSStringstringWithFormat:@"%zd秒",self.tempDurationOfCountDown--]forState:UIControlStateNormal];
}
}
3)、移除定时器
-(void)dealloc{
[self.countDownTimerinvalidate];
}
使用示例
1)、添加vertificationCodeIDCountDownButton属性
@interfaceViewController()
/**验证码倒计时的button*/
@property(nonatomic,strong)IDCountDownButton*vertificationCodeIDCountDownButton;
@end
2)、创建vertificationCodeIDCountDownButton并进行相关设置
-(void)viewDidLoad{
[superviewDidLoad];
//创建vertificationCodeIDCountDownButton
self.vertificationCodeIDCountDownButton=[[IDCountDownButtonalloc]initWithFrame:CGRectMake(160,204,120,44)];
//添加点击事件
[self.vertificationCodeIDCountDownButtonaddTarget:selfaction:@selector(vertificationCodeIDCountDownButtonClick:)forControlEvents:UIControlEventTouchUpInside];
//设置标题相关属性
[self.vertificationCodeIDCountDownButtonsetTitleColor:[UIColorwhiteColor]forState:UIControlStateNormal];
[self.vertificationCodeIDCountDownButtonsetTitle:@"获取验证码"forState:UIControlStateNormal];
//设置背景图片
[self.vertificationCodeIDCountDownButtonsetBackgroundImage:[UIImageimageNamed:@"redButton"]forState:UIControlStateNormal];
//设置倒计时时长
self.vertificationCodeIDCountDownButton.durationOfCountDown=10;
//将vertificationCodeIDCountDownButton添加的控制器的view中
[self.viewaddSubview:self.vertificationCodeIDCountDownButton];
}
3)、实现点击事件触发的操作
-(void)vertificationCodeIDCountDownButtonClick:(UIButton*)button{
//TODO:调用服务器接口,获取验证码
}
四、关于AppIcon
添加AppIcon时需要遵循以下规则
1)、命名,以Icon开头(首字母大写),跟上@2x/@3x
2)、尺寸,必须按要求设置尺寸
3)、图中所示的60pt对应的图片尺寸是
2x:120pxX120px
3x:180pxX180px
以上就是本文的全部内容,看完这篇“ios开发第一章之如何实现验证码倒计时功能”后,希望对大家的学习有所帮助。更多精彩内容,尽在爱站技术频道。