首页 > 代码库 > GCD计时DEMO
GCD计时DEMO
- (void)viewDidLoad{ [super viewDidLoad]; // Do any additional setup after loading the view. _timeBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [_timeBtn setBackgroundImage:[UIImage imageNamed:@"short2_apply_btn_disable"] forState:UIControlStateNormal]; [_timeBtn setBackgroundImage:[UIImage imageNamed:@"short2_apply_btn_over"] forState:UIControlStateHighlighted]; [_timeBtn setTitle:@"发送验证码" forState:UIControlStateNormal]; _timeBtn.frame = CGRectMake(100, 100, 150, 30); [_timeBtn addTarget:self action:@selector(starTime) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:_timeBtn];}- (void)starTime{ __block NSInteger 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 * NSEC_PER_SEC, 0 * NSEC_PER_SEC); dispatch_source_set_event_handler(timer, ^{ if (timeout <= 0 ) { dispatch_source_cancel(timer); dispatch_async(dispatch_get_main_queue(), ^{ [_timeBtn setTitle:@"发送验证码" forState:UIControlStateNormal]; _timeBtn.userInteractionEnabled = YES; }); }else{ NSInteger seconds = timeout % 60; NSString *strTime = [NSString stringWithFormat:@"%.2d",seconds]; dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"___%@",strTime); [_timeBtn setTitle:[NSString stringWithFormat:@"%@秒后重新发送",strTime] forState:UIControlStateNormal]; _timeBtn.userInteractionEnabled = NO; }); } timeout-- ; }); dispatch_resume(timer);}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。