我有一个计数,我正在使用带徽章的单元格。我想要的是当我得到这个数,将徽章编号设置为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 :(得分:1)
所以有几件事我会采取不同的做法......
你是对的,cellForRow是错误的地方。尝试在willDisplayCell中触发动画。通过触发器我的意思是,设置初始值,然后使用[cell performSelector:@selector(startAnimation)withObject:nil afterDelay:0]在下一个运行循环中开始动画。 或类似的东西。
另外,在for循环中调用dispatch是个坏主意。您可以设置一个带有完成块的动画块,然后每次从item获取新值时触发相同的动画块。您需要在某处跟踪当前值。
您可能想要一个包含任何对象项的自定义单元格。在cellForRow中设置它。在prepareForReuse中取消动画。动画代码可以放在自定义单元格的方法中,在上面的例子中,它叫做startAnimation。
答案 1 :(得分:0)
这是因为UI元素在循环完成之前不会更新,并且使用此方法您无法控制数字实际增加的时间。
一种解决方案是使用NSTimer调用增加标签的函数,但假设您希望快速查看标签增量,我建议不要运行一次超过几秒钟。