@interface ViewController ()
{
dispatch_source_t _timer;
}
@property (strong, nonatomic) UILabel *dayLabel;
@property (strong, nonatomic) UILabel *hourLabel;
@property (strong, nonatomic) UILabel *minuteLabel;
@property (strong, nonatomic) UILabel *secondLabel;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
在viewdidload里创建label
UILabel *llabel = [[UILabel alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width/2-75, 200, 150, 30)];
llabel.text = @"距离一周结束只有:";
llabel.textAlignment = NSTextAlignmentCenter;
llabel.textColor = [UIColor redColor];
[self.view addSubview:llabel];
self.dayLabel = [[UILabel alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width/2-75, 250, 30, 30)];
self.dayLabel.textColor = [UIColor whiteColor];
self.dayLabel.textAlignment = NSTextAlignmentCenter;
self.dayLabel.backgroundColor = [UIColor blackColor];
[self.view addSubview:self.dayLabel];
self.hourLabel = [[UILabel alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width/2+40-75, 250, 30, 30)];
self.hourLabel.textColor = [UIColor whiteColor];
self.hourLabel.textAlignment = NSTextAlignmentCenter;
self.hourLabel.backgroundColor = [UIColor blackColor];
[self.view addSubview:self.hourLabel];
self.minuteLabel = [[UILabel alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width/2+80-75, 250, 30, 30)];
self.minuteLabel.textColor = [UIColor whiteColor];
self.minuteLabel.textAlignment = NSTextAlignmentCenter;
self.minuteLabel.backgroundColor = [UIColor blackColor];
[self.view addSubview:self.minuteLabel];
self.secondLabel = [[UILabel alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width/2+120-75, 250, 30, 30)];
self.secondLabel.textColor = [UIColor whiteColor];
self.secondLabel.textAlignment = NSTextAlignmentCenter;
self.secondLabel.backgroundColor = [UIColor blackColor];
[self.view addSubview:self.secondLabel];
获取从现在到一周后的总秒数
NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *endDate = [dateFormatter dateFromString:[self getyyyymmdd]];
NSDate *endDate_week = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:([endDate timeIntervalSinceReferenceDate] + (24*3600)*5)];
NSDate *startDate = [NSDate date];
NSTimeInterval timeInterval =[endDate_week timeIntervalSinceDate:startDate];
做计算
if (_timer==nil) {
__block int timeout = timeInterval; //倒计时时间
NSLog(@"timeout:%d",timeout);
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));
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 *formatDay = [[NSDateFormatter alloc] init];
formatDay.dateFormat = @"yyyy-MM-dd";
NSString *dayStr = [formatDay stringFromDate:now];
return dayStr;
}
网友评论