动画整数增加并停止特定数字

时间:2012-10-22 18:51:41

标签: iphone ios xcode cocoa-touch

我有一个计数,我正在使用带徽章的单元格。我想要的是当我得到这个数,将徽章编号设置为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中这样做,并在返回单元格之前这样做,这就是问题所在。

谢谢!

2 个答案:

答案 0 :(得分:1)

所以有几件事我会采取不同的做法......

你是对的,cellForRow是错误的地方。尝试在willDisplayCell中触发动画。通过触发器我的意思是,设置初始值,然后使用[cell performSelector:@selector(startAnimation)withObject:nil afterDelay:0]在下一个运行循环中开始动画。 或类似的东西。

另外,在for循环中调用dispatch是个坏主意。您可以设置一个带有完成块的动画块,然后每次从item获取新值时触发相同的动画块。您需要在某处跟踪当前值。

您可能想要一个包含任何对象项的自定义单元格。在cellForRow中设置它。在prepareForReuse中取消动画。动画代码可以放在自定义单元格的方法中,在上面的例子中,它叫做startAnimation。

答案 1 :(得分:0)

这是因为UI元素在循环完成之前不会更新,并且使用此方法您无法控制数字实际增加的时间。

一种解决方案是使用NSTimer调用增加标签的函数,但假设您希望快速查看标签增量,我建议不要运行一次超过几秒钟。