示例代码简单易懂:
1
2
3
4
5
6
7
8
9
10
|
#
import
<uikit uikit.h=
""
>
@interface
ViewController : UIViewController
@property
(weak, nonatomic) IBOutlet UILabel *dayLabel;
@property
(weak, nonatomic) IBOutlet UILabel *hourLabel;
@property
(weak, nonatomic) IBOutlet UILabel *minuteLabel;
@property
(weak, nonatomic) IBOutlet UILabel *secondLabel;
@end
</uikit>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
#
import
"ViewController.h"
@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);
}
}
}
<span style=
"font-family: Arial, Verdana, sans-serif;"
>效果:</span>
|