iOS中常用的验证码倒计时, 支付半小时倒计时.

在Ios注册时候会需要一个发送验证码倒计时的需求.

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

    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

 

/*计时器方法*/

-(void)handleMaxShowTimer:(NSTimer *)theTimer{

    repeatCount--;

    

    NSString *timerText = [NSString stringWithFormat:@"%d",repeatCount];

    UIButton *tokenBtn = self.clickCodeButton;

    [tokenBtn setTitle:timerText forState:UIControlStateNormal];

    tokenBtn.enabled = NO;

    NSLog(@"%@", tokenBtn.titleLabel.text);

    if (repeatCount==0) {

        repeatCount = 60;

        [timer invalidate];

        timer = nil;

        tokenBtn.enabled = YES;

        [tokenBtn setTitle:@"验证码" forState:UIControlStateNormal];

    }

}

 

 

在支付的时候我们会遇到半小时后不支付,重置时间,下面就写了一个半小时倒计时

- (void)secondsCountDown:(UILabel *)label

{

    __block int timeout = 1800;

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

                NSLog(@"计时结束");

            });

        }else {

            int minutes = timeout/60;

            int seconds = timeout%60;

            NSString *strTime = [NSString stringWithFormat:@"%d 分钟 %d ", minutes, seconds];

            dispatch_async(dispatch_get_main_queue(), ^{

                

                label.text = [NSString stringWithFormat:@"支付剩余时间  %@",strTime];

                

            });

            timeout--;

        }

    });

    dispatch_resume(_timer);

}

 

 

posted @ 2017-02-22 14:45  斯文小书生  阅读(2242)  评论(0编辑  收藏  举报