Uiview动画不起作用

时间:2011-05-09 17:54:08

标签: iphone animation uiview

所以这是我的代码:

- (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

在输出中,您可以看到每个动画何时触发。

1 个答案:

答案 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];
                                          }];
                     }];



}