秒杀倒计时
#import "ViewController.h"
#define SCREEN_WIDTH [[UIScreen mainScreen]bounds].size.width
#define SCREEN_HEIGHT [[UIScreen mainScreen]bounds].size.height
@interface ViewController (){
dispatch_source_t _timer;
}
@property (nonatomic,strong)UIView *ddView;
@property (nonatomic,strong)UILabel *dayLabel;//剩余天数
@property (nonatomic,strong)UILabel *hourLabel;//剩余小时
@property (nonatomic,strong)UILabel *minuteLabel;//剩余分钟
@property (nonatomic,strong)UILabel *secondLabel;//剩余秒
@end
//实现
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self createUI];
//日期格式
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
// 获取当天的年月日字符串
NSDate *endDate = [dateFormatter dateFromString:[self getYYYYMMDD]];
NSDate *endDate_Tomorrow = [[NSDate alloc]initWithTimeIntervalSinceReferenceDate:([endDate timeIntervalSinceReferenceDate] + 24 * 3600)];
NSDate *startDate = [NSDate date];//当前的date
//距离明天凌晨的倒计时时间单位为s 25641.036014020443s
NSTimeInterval timeInterVal = [endDate_Tomorrow timeIntervalSinceDate:startDate];
if (!_timer) {
__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 = @"";
self.minuteLabel.text = @"";
self.secondLabel.text = @"";
});
}else{
int days = (int)(timeout / (3600 * 24));
if (days == 0) {
self.dayLabel.text = @"";
}
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 (days == 0) {
self.dayLabel.text = @"0天";
}else{
self.dayLabel.text = [NSString stringWithFormat:@"%d天",days];
}
if (hours < 10) {
self.hourLabel.text = [NSString stringWithFormat:@": 0%d",hours];
}else{
self.hourLabel.text = [NSString stringWithFormat:@": %d",hours];
}
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);
}
}
}
/*
获取当天的年月日字符串
*/
- (NSString *)getYYYYMMDD{
NSDate *now =[NSDate date];
NSDateFormatter *formatToday = [[NSDateFormatter alloc]init];
formatToday.dateFormat = @"yyyy-MM-dd";
NSString *dayStr = [formatToday stringFromDate:now];
return dayStr;
}
- (void)createUI{
self.ddView = [[UIView alloc]initWithFrame:CGRectMake( SCREEN_WIDTH - 168, 100,160, 50)];
[self.view addSubview:self.ddView];
float cutViewW = 160 / 4.0;
self.dayLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 10, cutViewW, 30)];
self.dayLabel.textAlignment = NSTextAlignmentRight;
[self.ddView addSubview:self.dayLabel];
self.hourLabel = [[UILabel alloc]initWithFrame:CGRectMake(cutViewW, 10, cutViewW, 30)];
self.hourLabel.textAlignment = NSTextAlignmentRight;
[self.ddView addSubview:self.hourLabel];
self.minuteLabel = [[UILabel alloc]initWithFrame:CGRectMake(2 * cutViewW, 10, cutViewW, 30)];
self.minuteLabel.textAlignment = NSTextAlignmentRight;
[self.ddView addSubview:self.minuteLabel];
self.secondLabel = [[UILabel alloc]initWithFrame:CGRectMake(3 * cutViewW, 10, cutViewW, 30)];
self.secondLabel.textAlignment = NSTextAlignmentRight;
[self.ddView addSubview:self.secondLabel];
}
@end