IOS开发入门之iOS实现短信验证码倒计时
白羽 2019-01-11 来源 :网络 阅读 1117 评论 0

摘要:本文将带你了解IOS开发入门之iOS实现短信验证码倒计时,希望本文对大家学IOS有所帮助。

    本文将带你了解IOS开发入门之iOS实现短信验证码倒计时,希望本文对大家学IOS有所帮助。


在开发中,经常在需要用户注册的时候会需要实现验证码倒计时的功能,下面是解决这个问题的两种思路(使用UIButton控件)
   
    一、利用NSTimer计时器
   
      1.新建一个UIButton按钮,设置成属性,名为codeButton。(UIButton样式一定要为自定义,否则后面倒计时数秒时会出现闪烁现象)
   
    2.定义一个NSTimer的属性,名为timer,同时定义一个用于计时的int变量time,设置初始值为60。
   
   
    //启动一个定时器
    self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self   selector:@selector(operatePerSecond) userInfo:nil repeats:YES];
     
    //实现定时器中的方法
    - (void)operatePerSecond {
        if (time == 1) {
          [self.timer invalidate];
          time = 60;
          [self.codeButton   setTitle:@"重新获取" forState:UIControlStateNormal];
          self.codeButton.tintColor =   [UIColor blackColor];
          self.codeButton.enabled =   YES;
        }else {
          time --;
          [self.codeButton   setTitle:[NSString stringWithFormat:@"%ds" ,time]   forState:UIControlStateNormal];
        }
    }
    3.此时主要逻辑已经完成,但要记得:在本页面即将消失的时候也要停掉计时器self.timer。
   
    二、利用GCD实现
   
    1.定义一个用于计时的time(此时要用block修饰)---    block int time = 60;
   
   
      //倒计时时间
      __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_TIME_NOW, 1.0 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);
        dispatch_source_set_event_handler(timer, ^{
        if(timeout == 1){
          //倒计时结束,关闭
            dispatch_source_cancel(timer);
            dispatch_async(dispatch_get_main_queue(), ^{
          timeout = 60;
          [self.codeButton   setTitle:@"重新获取" forState:UIControlStateNormal];
          self.codeButton.tintColor =   [UIColor blackColor];
          self.codeButton.enabled =   YES;
          });
        }else{
          NSString *strTime = [NSString   stringWithFormat:@"%ds",timeout];
          dispatch_async(dispatch_get_main_queue(),   ^{
            [self.codeButton   setTitle:strTime forState:UIControlStateNormal];
          });
          timeout--;
        }
      });
    dispatch_resume(timer);
    2.把上述代码写入点击方法中即可实现倒计时效果。
   
        

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之IOS频道!

本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved