ios开发第一章之如何实现验证码倒计时功能

来源:爱站网时间:2021-12-15编辑:网友分享
今天爱站技术频道小编将给大家带来关于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开发第一章之如何实现验证码倒计时功能”后,希望对大家的学习有所帮助。更多精彩内容,尽在爱站技术频道。

上一篇:仿IOS效果 带弹簧动画的ListView

下一篇:iOS开发之使用Picker View的案例

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载