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]; } }