IOS开发代码分享之用nstimer实现倒计时功能
用nstimer实现倒计时功能,废话不多说,直接上代码,详细解释请参照注释
//
[NSTimerscheduledTimerWithTimeInterval:1.0target:selfselector:@selector(timerFireMethod:)userInfo:nilrepeats:YES];
//
-(void)timerFireMethod:(NSTimer*)theTimer
{
BOOLtimeStart=YES;
NSCalendar*cal=[NSCalendarcurrentCalendar];//定义一个NSCalendar对象
NSDateComponents*endTime=[[NSDateComponentsalloc]init]; //初始化目标时间...
NSDate*today=[NSDatedate]; //得到当前时间
NSDateFormatter*dateFormatter=[[NSDateFormatteralloc]init];
[dateFormattersetDateFormat:@"yyyy-MM-ddHH:mm:ss"];
NSDate*dateString=[dateFormatterdateFromString:todate];
NSString*overdate=[dateFormatterstringFromDate:dateString];
// NSLog(@"overdate=%@",overdate);
staticintyear;
staticintmonth;
staticintday;
staticinthour;
staticintminute;
staticintsecond;
if(timeStart){//从NSDate中取出年月日,时分秒,但是只能取一次
year=[[overdatesubstringWithRange:NSMakeRange(0,4)]intValue];
month=[[overdatesubstringWithRange:NSMakeRange(5,2)]intValue];
day=[[overdatesubstringWithRange:NSMakeRange(8,2)]intValue];
hour=[[overdatesubstringWithRange:NSMakeRange(11,2)]intValue];
minute=[[overdatesubstringWithRange:NSMakeRange(14,2)]intValue];
second=[[overdatesubstringWithRange:NSMakeRange(17,2)]intValue];
timeStart=NO;
}
[endTimesetYear:year];
[endTimesetMonth:month];
[endTimesetDay:day];
[endTimesetHour:hour];
[endTimesetMinute:minute];
[endTimesetSecond:second];
NSDate*overTime=[caldateFromComponents:endTime];//把目标时间装载入date
//用来得到具体的时差,是为了统一成北京时间
unsignedintunitFlags=NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit;
NSDateComponents*d=[calcomponents:unitFlagsfromDate:todaytoDate:overTimeoptions:0];
NSString*t=[NSStringstringWithFormat:@"%d",[dday]];
NSString*h=[NSStringstringWithFormat:@"%d",[dhour]];
NSString*fen=[NSStringstringWithFormat:@"%d",[dminute]];
if([dminute]<10){
fen=[NSStringstringWithFormat:@"0%d",[dminute]];
}
NSString*miao=[NSStringstringWithFormat:@"%d",[dsecond]];
if([dsecond]<10){
miao=[NSStringstringWithFormat:@"0%d",[dsecond]];
}
// NSLog(@"===%@天%@:%@:%@",t,h,fen,miao);
[_longtimesetText:[NSStringstringWithFormat:@"%@天%@:%@:%@",t,h,fen,miao]];
if([dsecond]>0){
//计时尚未结束,do_something
// [_longtimesetText:[NSStringstringWithFormat:@"%@:%@:%@",d,fen,miao]];
}elseif([dsecond]==0){
//计时结束do_something
}else{
//计时器失效
[theTimerinvalidate];
}
}