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,并在返回单元格之前执行此操作,这就是问题所在。

谢谢!

4

2 回答 2

1

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

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

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

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

于 2012-10-22T19:07:19.077 回答
0

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

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

于 2012-10-22T19:00:54.683 回答