2013-12-10 42 views
0

理論上這個進度條應該持續7秒,但它似乎運行了一段時間。我的數學必須是不正確的,或者我忽略了一些東西。簡單的NSTimer進度條持續7秒

定時器應在1秒內被燒成100倍和進度條應該長於約7倍,達到1.0

任何幫助,將不勝感激。

- (void)startTimer; 
{ 
    [pBar showProgress:self.progress]; 

    [self.timer invalidate]; 
    self.timer = nil; 

    if (self.progress < 1.0) { 
     CGFloat step = 0.01; 
     self.timer = [NSTimer scheduledTimerWithTimeInterval:step target:self 
               selector:@selector(startTimer) 
               userInfo:nil repeats:NO]; 
     self.progress = self.progress + 0.00143; 
    } else { 
     [self performSelector:@selector(stopProgress) 
       withObject:nil afterDelay:0.5]; 
    } 
} 
+0

你想要做什麼,'如果''重複'是'否'。並且你正在比較兩個浮點數達到6位小數,這主要是給你不正確的比較。 –

+0

StartTimer在做什麼? – arnoapp

+0

什麼是有點長,你如何驗證它?另外,你想完成什麼?您每次迭代都會按照固定的數量增加進度,理論上700次迭代後,它應該是完整的,但它不需要0時間來安排定時器。 – lintmachine

回答

5

你不應該像你那樣經常更新。每秒100次是太頻繁了。 60在理論上足以達到好的幀率。但是UIProgressBar可以用動畫更新它的值。因此,您只需更新總共70次或每秒10次,並使用動畫進行更改。

我會去10動畫更新或更少。或者你可以嘗試用一個動畫來更新:

[UIView animateWithDuration:7.0 animations:^{ 
    [progressView setProgress:1.0 animated:YES]; //maybe try animated: NO here 
} completion:^(BOOL finished) { 
    //ended 
}]; 

雖然我沒有測試這種方法,似乎遠遠超過手動執行什麼本質上是進步定時動畫清潔。

+0

你最終使用動畫:YES? – FelixLam

+0

是的,我最終將它實現爲動畫,我正在使用自定義進度條,並沒有考慮額外的時間安排計時器。 – Sam