概述
@interface ViewController ()
{
dispatch_source_t _timer;
}
@property (nonatomic,strong)UILabel *hourLabel;
@property (nonatomic,strong)UILabel *minuteLabel;
@property (nonatomic,strong)UILabel *secondLabel;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self createTimeLabel];
// 后台传给你的时间参数(注意日期的格式)
[self CountdownWithTimeString:@"2016-7-16 12:25:00"];
}
- (void)createTimeLabel{
_hourLabel = [[UILabel alloc]initWithFrame:CGRectMake(150, 150, 50, 20)];
[self.view addSubview:_hourLabel];
_minuteLabel = [[UILabel alloc]initWithFrame:CGRectMake(200, 150, 50, 20)];
[self.view addSubview:_minuteLabel];
_secondLabel = [[UILabel alloc]initWithFrame:CGRectMake(250, 150, 50, 20)];
[self.view addSubview:_secondLabel];
}
- (void)CountdownWithTimeString:(NSString *)string{
NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *endDate = [dateFormatter dateFromString:string];
NSDate *endDate_tomorrow = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:([endDate timeIntervalSinceReferenceDate])];
NSDate *startDate = [NSDate date];
NSTimeInterval timeInterval =[endDate_tomorrow timeIntervalSinceDate:startDate];
if (_timer==nil) {
__block int timeout = timeInterval; //倒计时时间
if (timeout!=0) {
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
_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);
_timer = nil;
dispatch_async(dispatch_get_main_queue(), ^{
self.dayLabel.text = @"";
self.hourLabel.text = @"00";
self.minuteLabel.text = @"00";
self.secondLabel.text = @"00";
});
}else{
int days = (int)(timeout/(3600*24));
int hours1 = (int)((timeout-days)/3600);
int hours = (int)((timeout-days*24*3600)/3600);
int minute = (int)(timeout-days*24*3600-hours*3600)/60;
int second = timeout-days*24*3600-hours*3600-minute*60;
dispatch_async(dispatch_get_main_queue(), ^{
if (hours1<10) {
self.hourLabel.text = [NSString stringWithFormat:@"0%d",hours1];
}else{
self.hourLabel.text = [NSString stringWithFormat:@"%d",hours1];
}
if (minute<10) {
self.minuteLabel.text = [NSString stringWithFormat:@"0%d",minute];
}else{
self.minuteLabel.text = [NSString stringWithFormat:@"%d",minute];
}
if (second<10) {
self.secondLabel.text = [NSString stringWithFormat:@"0%d",second];
}else{
self.secondLabel.text = [NSString stringWithFormat:@"%d",second];
}
});
timeout--;
}
});
dispatch_resume(_timer);
}
}
}
转载于:https://my.oschina.net/iOScoderZhao/blog/712921
最后
以上就是纯情服饰为你收集整理的限时抢购,倒计时,定时器的全部内容,希望文章能够帮你解决限时抢购,倒计时,定时器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复