版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。
示例代碼簡單易懂:
#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
#import "viewcontroller.h"
@interface viewcontroller ()
{
dispatch_source_t _timer;
}
@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) {
}
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;
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];
self.hourlabel.text = [nsstring stringwithformat:@"%d",hours];
if (minute<10) {
self.minutelabel.text = [nsstring stringwithformat:@"0%d",minute];
self.minutelabel.text = [nsstring stringwithformat:@"%d",minute];
if (second<10) {
self.secondlabel.text = [nsstring stringwithformat:@"0%d",second];
self.secondlabel.text = [nsstring stringwithformat:@"%d",second];
timeout--;
}
});
dispatch_resume(_timer);
}
}
效果:
原文位址:http://blog.csdn.net/qq_31810357/article/details/50700292