定时器

  • 执行一次
double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
    //执行事件
});



  • 重复执行
NSTimeInterval period = 1.0; //设置时间间隔

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), period * NSEC_PER_SEC, 0); //每秒执行

dispatch_source_set_event_handler(_timer, ^{
    //在这里执行事件
});

dispatch_resume(_timer);



  • 倒计时

#pragma mark Timer 短信计时


-(void)startTime{

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


                //设置界面的按钮显示 根据自己需求设置


                [self.verifyButton setTitle:@"发送验证码" forState:UIControlStateNormal];


                self.verifyButton.backgroundColor = RGB(39, 142, 251);


                [self.verifyButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];


                self.verifyButton.enabled = YES;


            });


        }else{


            int seconds = timeout % 120;


            NSString *strTime = [NSString stringWithFormat:@"%.2d", seconds];


            dispatch_async(dispatch_get_main_queue(), ^{


                //设置界面的按钮显示 根据自己需求设置


                [UIView beginAnimations:nil context:nil];


                [UIView setAnimationDuration:1];


                [self.verifyButton setTitle:[NSString stringWithFormat:@"%@ 秒后重发",strTime] forState:UIControlStateNormal];


                [UIView commitAnimations];


                self.verifyButton.backgroundColor = RGB(234, 235, 236);


                [self.verifyButton setTitleColor:[UIColor lightGrayColor] forState:UIControlStateNormal];


                self.verifyButton.enabled = NO;


            });


            timeout--;


        }


    });


    dispatch_resume(_timer);


}

 
原文地址:https://www.cnblogs.com/sungk/p/5223204.html