@interface
ViewController ()
{
dispatch_source_t _timer;
}
@end
@implementation
ViewController
/**
* 获取当天的年月日的字符串
* 这里测试用
* @return 格式为年-月-日
*/
-(NSString *)getyyyymmdd{
NSDate *now = [NSDate date];
NSDateFormatter *formatDay = [[NSDateFormatter alloc] init];
formatDay.dateFormat = @
"yyyy-MM-dd"
;
NSString *dayStr = [formatDay stringFromDate:now];
return
dayStr;
}
- (
void
)viewDidLoad {
[
super
viewDidLoad];
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];
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
));
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);
}
}
}