iOS中简单易懂秒杀倒计时/倒计时

来源:互联网 发布:php is_string 编辑:程序博客网 时间:2024/05/21 09:34

示例代码简单易懂:

\

?
1
2
3
4
5
6
7
8
9
10
#import<uikit uikit.h="">
 
@interfaceViewController : 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"
 
@interfaceViewController ()
{
     dispatch_source_t _timer;
}
@end
 
@implementationViewController
/**
 *  获取当天的年月日的字符串
 *  这里测试用
 *  @return 格式为年-月-日
 */
-(NSString *)getyyyymmdd{
    NSDate *now = [NSDate date];
    NSDateFormatter *formatDay = [[NSDateFormatter alloc] init];
    formatDay.dateFormat = @"yyyy-MM-dd";
    NSString *dayStr = [formatDay stringFromDate:now];
     
    returndayStr;
     
}
- (void)viewDidLoad {
    [superviewDidLoad];
    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) {
        __blockinttimeout = 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{
                    intdays = (int)(timeout/(3600*24));
                    if(days==0) {
                        self.dayLabel.text = @"";
                    }
                    inthours = (int)((timeout-days*24*3600)/3600);
                    intminute = (int)(timeout-days*24*3600-hours*3600)/60;
                    intsecond = 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>

\

0 0
原创粉丝点击