所以这是我的代码:
- (UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
if (section == 0) {
if (!header) {
header = [[CustomBackground alloc] initWithFrame:CGRectMake(0, 0, 320, 30)];
float number = [self.total floatValue];
[self updateTotalLabel: &number];
}
return header;
}
return nil;
}
-(void)updateTotalLabel:(float *)amount
{
float currentValue = [self.total floatValue];
self.total = [NSNumber numberWithFloat:(currentValue + *amount)];
[header updateLabel:[NSString stringWithFormat:TOTAL, [total floatValue]]];
}
标题updateLabel:
-(void)updateLabel:(NSString *)string
{
CGRect frame = self.frame;
frame.origin.y = -frame.size.height;
[UIView animateWithDuration:0.5
delay:0.1
options: UIViewAnimationCurveEaseOut
animations:^{
self.frame = frame;
}
completion:^(BOOL finished){
NSLog(@"Done!");
}];
self.frame = frame;
frame.origin.y = 0;
self.label.text = string;
[UIView animateWithDuration:0.5
delay:1.0
options: UIViewAnimationTransitionCurlDown
animations:^{
self.frame = frame;
}
completion:^(BOOL finished){
NSLog(@"Done!");
}];
[label setNeedsDisplay];
}
每次用户向tableview添加新记录时,我都会调用updateTotalLabel。 我有动画问题,因为动画只有在第一次调用updateLabel后才能工作。
编辑
好的,所以我拍了一部电影:YT
在输出中,您可以看到每个动画何时触发。
答案 0 :(得分:1)
不确定您的问题是什么,因为实际上没有描述正在发生的事情和未发生的事情。我确实看到了你的动画代码有问题。您试图使用延迟来允许多个连续动画。它可能有效,我真的不知道。但是,更好的方法是使用完成块继续您想要的动画。试试这个:
-(void)updateLabel:(NSString *)string
{
CGRect frame = self.frame;
frame.origin.y = -frame.size.height;
[UIView animateWithDuration:0.5
delay:0.1
options: UIViewAnimationCurveEaseOut
animations:^{
self.frame = frame;
}
completion:^(BOOL finished){
NSLog(@"Done 1!");
frame.origin.y = 0;
self.label.text = string;
[UIView animateWithDuration:0.5
delay:0.0
options: UIViewAnimationTransitionCurlDown
animations:^{
self.frame = frame;
}
completion:^(BOOL finished){
NSLog(@"Done 2!");
[label setNeedsDisplay];
}];
}];
}