2012-10-22 46 views
2

我有一個計數,而且我正在使用帶有徽章的單元格。我想要的是,當我得到這個數字,設置徽章號碼爲0,然後動畫從0增加到一些計數。動畫整數增加並在特定數字上停止

這裏是我嘗試過,但沒有工作:

for (int i = 0 ; i<=item.count; i++) { 
    int64_t delayInSeconds = .1f; 
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
      [UIView animateWithDuration:0.1f animations:^{ 
       cell.badgeString = [NSString stringWithFormat:@"%d",i]; 
      }]; 
      NSLog(@"%@",cell.badgeString); 
    }); 
} 

它沒有動畫。我在tableView:cellForRowAtIndexPath中這樣做,然後在返回單元格之前這樣做,這是問題所在。

謝謝!

回答

0

這是因爲UI元素不會更新,直到循環完成,並且使用此方法,您無法控制數字實際增加的時間長度。

一個解決方案是使用NSTimer來調用增加標籤的函數,但假設您希望快速查看標籤增量,我不會建議運行一個以上的時間超過幾秒。

1

因此,有幾件事情,我會做不同的...

你說得對,cellForRow錯誤的地方要做到這一點。嘗試在willDisplayCell中觸發動畫。我的意思是,設置初始值,然後在下一個運行循環中使用[cell performSelector:@selector(startAnimation)withObject:nil afterDelay:0]開始動畫。 或其他相關內容。

此外,在for循環中調用調度是一個壞主意。您可以使用完成塊設置動畫塊,然後觸發相同的動畫塊,每次從項目獲取新值。你需要跟蹤當前的值。

您可能需要一個具有任何對象項目的自定義單元格。在cellForRow中設置它。在prepareForReuse中取消您的動畫。動畫代碼可以在您的自定義單元格的方法中進行,在我上面的示例中稱爲startAnimation。

+0

這很有趣,謝謝。我不知道從哪裏調用startAnimation。我認爲最好在視圖控制器中創建動畫,因爲有計數。可能只是在prepareForReuse的視圖控制器上調用一些方法。 – Devfly

+0

這需要將單元鏈接到視圖控制器,然後視圖控制器明確地處理來自任意單元的調用,如果單元沒有引用模型的一部分,則需要在tableview中查找單元,然後複製你的一些cellForRow代碼(這只是我的假設,儘管你可能已經做了與你的實現不同的東西)。如果需要的話,最好使用視圖控制器來提供/管理從視圖到模型的鏈接(或者只是給它計數)。比管理所有單元格的動畫更清潔。 – Matt