美文网首页
倒计时的实现方法

倒计时的实现方法

作者: Rayla_周周 | 来源:发表于2016-08-01 12:52 被阅读0次

    方法一:NSTimer

    1> 创建定时器属性

       @property(strong,nonatomic)NSTimer *timer;

    2 > 定时器相关方法

    /// 开启定时器

    - (void)openTimer {

    // 设置倒计时label的数字显示为  60

    self.timeLabel.text = [NSString stringWithFormat:@"%d",60];

    self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerDone) userInfo:nil repeats:YES];

    }

    /// 关闭定时器

    - (void)closeTimer {

    // 1. 关闭定时器

    [self.timer invalidate];

    // 2. 启动获取验证码按钮

    self.getVerifyButton.enabled = YES;

    }

    /// 定时器响应时间

    - (void)timerDone {

    // 1. 让定时label数字 -1

    self.timeLabel.text = [NSString stringWithFormat:@"%d",[self.timeLabel.text intValue]-1];

    // 2. 判断定时器时间,关闭定时器

    if ([self.timeLabel.text intValue]>0) {

    return;

    }

    [self closeTimer];

    }

    3> 在需要的时候开启,和关闭定时器

      注:定时器方法中可以加入需要设置的东西

    方法二:GCD

    __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(), ^{

    // 根据个人需求,设置界面相关的显示

    }else{

    NSString *strTime = [NSString stringWithFormat:@"%d秒", timeout];

    dispatch_async(dispatch_get_main_queue(), ^{

    // [_yanzhengmaBtn setTitle:strTime forState:UIControlStateNormal];

    // [_yanzhengmaBtn setUserInteractionEnabled:NO];

    // 设置页面上对应控件的显示

    });

    timeout--;

    }

    });

    dispatch_resume(_timer);

    相关文章

      网友评论

          本文标题:倒计时的实现方法

          本文链接:https://www.haomeiwen.com/subject/prvxsttx.html