2011-07-26 86 views
3

我有兩個時間..一個直接取得字符串(@「21:00」)和其他是當前時間。我想顯示一個倒計時計時器,顯示從現在開始到21:00的剩餘時間。iPhone中的倒數計時器

例如:如果當前時間爲17:30,則我使用的標籤應顯示「您有3小時30分鐘..」。 謝謝..

+0

見我的回答,我已經提供了完整的工作示例代碼,做什麼你問究竟 –

+0

亞歷thankyoy採取這樣的interesrt在此。現在我已經完成了我完全需要的東西。謝謝.. –

回答

9

確定已完全修改我的答案,並創建了一個完整的解決方案,在github上提供完整測試示例代碼。

享受:)

+0

好吧,看看我的最新樣本代碼 –

+0

我想這次比較當前時間,並顯示在一個標籤作爲定時器跑回病房。 –

+0

我會seee一分鐘tghanks –

0

您創建的NSTimer將觸發每一秒:

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(tickClock) userInfo:nil repeats:YES]; 

火災時,你輸入一個方法:

- (void)tickClock; 
在那裏

,您比較日期你已經對現在的日期[NSData currentDate];

喜歡其中distanceBetweenDates以秒爲單位指定

NSTimeInterval distanceBetweenDates = [currentDate timeIntervalSinceDate:yourDate]; 

若要從您的字符串的日期創建的NSDate相應

NSInteger year = 2011; 
NSInteger month = 8; 
NSInteger day = 26; 
NSInteger hour = 21; 
NSInteger minute = 0; 
NSInteger second = 0;  


NSCalendar *calendar = [NSCalendar currentCalendar]; 
NSDateComponents *components = [[NSDateComponents alloc] init]; 
[components setYear:year]; 
[components setMonth:month]; 
[components setDay:day]; 
[components setHour:hour]; 
[components setMinute:minute]; 
[components setSecond:second]; 
    NSDate *date = [calendar dateFromComponents:components]; 
[components release]; 
+0

我沒有約會!我只有一串我說21:00。我會做什麼呢? –

+0

看我更新的帖子 –

3

像這樣的東西應該這樣做。這會在幾秒鐘內給你剩餘的時間。然後你只需要標準的定時器的東西,如其他答案中所示。

//assumption: targetTime is after now 
NSString *targetTime = @"21:00"; 

//split our time into components 
NSArray *timeSplit = [targetTime componentsSeparatedByString:@":"]; 

NSUInteger hours = [[timeSplit objectAtIndex:0] intValue]; 
NSUInteger minutes = [[timeSplit objectAtIndex:1] intValue]; 

NSDate *now = [NSDate date]; 

//split now into year month day components 
NSCalendar *currentCalendar = [NSCalendar currentCalendar]; 
NSDateComponents *dateComponents = [currentCalendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:now]; 

//set our time components from above 
[dateComponents setHour:hours]; 
[dateComponents setMinute:minutes]; 

NSDate *targetDate = [currentCalendar dateFromComponents:dateComponents]; 

//ensure target is after now 
if ([targetDate timeIntervalSinceDate:now] < 0) 
{ 
    NSDateComponents *day = [[NSDateComponents alloc] init]; 
    [day setDay:1]; 

    targetDate = [currentCalendar dateByAddingComponents:day toDate:targetDate options:0]; 
} 

NSTimeInterval timeRemaining = [targetDate timeIntervalSinceDate:now]; 
+0

我會把它變成一個方法,並從計時器方法中調用它,但我會把它作爲一個練習給你。 – Ian1971

+0

我已經完成了你的代碼,並得到了我需要的東西。但爲了亞歷克斯已經採取的努力,以清除我的疑問儲備東西..他也給了我需要的東西,所以我接受他的答案!!再次感謝伊恩讓我做這件事作爲練習。 –

+0

感謝Sadumerry。我同意亞歷克斯值得的點。 – Ian1971