//
// ViewController.m
// 倒计时
//
// Created by 常欢 on 16/8/9.
// Copyright © 2016年 传化. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
{
UIButton *btn;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
btn =[UIButton buttonWithType:UIButtonTypeCustom];
btn.frame =CGRectMake(100, 100, 100, 100);
btn.backgroundColor =[UIColor redColor];
[btn setTitle:@"获取验证码" forState:UIControlStateNormal];
btn.userInteractionEnabled =YES;
[btn addTarget:self action:@selector(btnClicked) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
}
-(void)btnClicked
{
btn.userInteractionEnabled = NO;
__block int timeout =59;
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(), ^{
[btn setTitle:@"获取验证码" forState:UIControlStateNormal];
btn.userInteractionEnabled =YES;
});
}else
{
int seconds =timeout % 60;
NSString *strTime =[NSString stringWithFormat:@"%.2d",seconds];
dispatch_async(dispatch_get_main_queue(), ^{
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1];
[btn setTitle:[NSString stringWithFormat:@"%@秒重发",strTime] forState:UIControlStateNormal];
[UIView commitAnimations];
btn.userInteractionEnabled =NO;
[btn setBackgroundColor:[UIColor lightGrayColor]];
});
timeout--;
NSLog(@"%d",timeout);
}
});
dispatch_resume(_timer);//重新开始
/* 取消延迟执行函数
[[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(todoSomething:) object:btn];
[self performSelector:@selector(todoSomething:) withObject:btn afterDelay:5];
*/
}
-(void)todoSomething:(UIButton *)button
{
button.userInteractionEnabled = YES;
}
/* GCD计时器
dispatch_resume(_timer);
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_global_queue(0, 0));
dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);
dispatch_source_set_event_handler(timer, ^{
});
*/
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
// ViewController.m
// 倒计时
//
// Created by 常欢 on 16/8/9.
// Copyright © 2016年 传化. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
{
UIButton *btn;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
btn =[UIButton buttonWithType:UIButtonTypeCustom];
btn.frame =CGRectMake(100, 100, 100, 100);
btn.backgroundColor =[UIColor redColor];
[btn setTitle:@"获取验证码" forState:UIControlStateNormal];
btn.userInteractionEnabled =YES;
[btn addTarget:self action:@selector(btnClicked) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
}
-(void)btnClicked
{
btn.userInteractionEnabled = NO;
__block int timeout =59;
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(), ^{
[btn setTitle:@"获取验证码" forState:UIControlStateNormal];
btn.userInteractionEnabled =YES;
});
}else
{
int seconds =timeout % 60;
NSString *strTime =[NSString stringWithFormat:@"%.2d",seconds];
dispatch_async(dispatch_get_main_queue(), ^{
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1];
[btn setTitle:[NSString stringWithFormat:@"%@秒重发",strTime] forState:UIControlStateNormal];
[UIView commitAnimations];
btn.userInteractionEnabled =NO;
[btn setBackgroundColor:[UIColor lightGrayColor]];
});
timeout--;
NSLog(@"%d",timeout);
}
});
dispatch_resume(_timer);//重新开始
/* 取消延迟执行函数
[[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(todoSomething:) object:btn];
[self performSelector:@selector(todoSomething:) withObject:btn afterDelay:5];
*/
}
-(void)todoSomething:(UIButton *)button
{
button.userInteractionEnabled = YES;
}
/* GCD计时器
dispatch_resume(_timer);
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_global_queue(0, 0));
dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);
dispatch_source_set_event_handler(timer, ^{
});
*/
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end