注:本人第一次在简书上发表文章,共勉
Update 12-20 2016
运行中,会一直走,但是真机推到后台不会变,如果需要实现同时,Google到一个(已测试):
如果有好的方法也可以留言告诉我,不胜感激...
CFAbsoluteTimestart =CFAbsoluteTimeGetCurrent();
if((start -_time) >1.5&& [strTimeintValue] >1&& [strTimeintValue] <30) {
intnum = (int)ceil(start -_time);
timeout = timeout - num +1;
strTime = [NSStringstringWithFormat:@"%zd", [strTimeintValue] - num];
timeout--;
if(timeout <0) {
return;
}
}
_time=CFAbsoluteTimeGetCurrent();
加在
NSLog(@"____%@", strTime);
[_btnsetTitle:[NSStringstringWithFormat:@"%@",strTime]forState:UIControlStateNormal];
_btn.backgroundColor= [UIColorgrayColor];
_btn.userInteractionEnabled=NO;
前
Update 07.15.2016
亲测,退到后台在进入定时器仍然再走,时间对应减少!别再问了,最后提供一个Demo ps: 亲们,遇到问题多动手,学习新知识,多动手!
1.最终实现的鲜果如下图所示:
2.主要是在Button的Event里面添加下列代码:
- (IBAction)sendEvent:(id)sender {
__block int timeout=30; //倒计时时间
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(), ^{
//设置界面的按钮显示 根据自己需求设置
[_countdownButton setTitle:@"发送验证码" forState:UIControlStateNormal];
_countdownButton.backgroundColor = [UIColor orangeColor];
_countdownButton.userInteractionEnabled = YES;
});
}else{
// int minutes = timeout / 60;
int seconds = timeout % 59;
NSString *strTime = [NSString stringWithFormat:@"%.2d", seconds];
dispatch_async(dispatch_get_main_queue(), ^{
//设置界面的按钮显示 根据自己需求设置
NSLog(@"____%@",strTime);
[_countdownButton setTitle:[NSString stringWithFormat:@"%@",strTime] forState:UIControlStateNormal];
_countdownButton.backgroundColor = [UIColor grayColor];
_countdownButton.userInteractionEnabled = NO;
});
timeout--;
}
});
dispatch_resume(_timer);
}
(Update 07.15.2016)(Update 07.15.2016)
网友评论