UIView动画无法在ios 5.1中运行

时间:2013-02-15 10:19:31

标签: iphone uitableview ios6 ios5.1

我有UITableView。我希望在单元格加载到表格时制作动画。我这样做了。

-(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    CGRect tmpFrame;
    CGRect originalFrame;
    originalFrame = cell.frame;
    tmpFrame = cell.frame;
    tmpFrame = CGRectMake(0, -50, 320, 50);
    cell.frame = tmpFrame;

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:5.0f];
    [UIView setAnimationBeginsFromCurrentState:YES];
    UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 50, 320, 1)];
    separatorLineView.backgroundColor = [UIColor lightGrayColor];
    [cell.contentView addSubview:separatorLineView];
    cell.frame = originalFrame;
    [UIView commitAnimations];
}

此代码在iOS 6(iPhone模拟器6)中运行良好,但在iOS 5.1(iPhone模拟器5.1)中无效。

2 个答案:

答案 0 :(得分:0)

完成。 我将此代码放入

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

返回牢房之前。

答案 1 :(得分:0)

所以我知道你已经有了解决方案,但我建议你使用动画块,除非你让它与旧版本兼容。无论如何,如果你不是这样可能会提供一种不同的方式来编写动画。我喜欢这样做,因为我觉得我可以更好地控制发生的事情和更少的混乱。

UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if(!cell){
    cell = [[UITableViewCell alloc]init];
}

CGRect movementFrame = cell.frame; // set the movement frame for modification
movementFrame.origin.y -= 50; //adjust only one variable instead of making a rect..

//Start your animation block. 
[UIView animateWithDuration:0.5
                      delay:0.0
                    options:UIViewAnimationCurveEaseOut
                 animations:^{
                     //Animation here
                     cell.frame = movementFrame; // Commit your changes basically
                 } completion:^(BOOL finished) {
                     //Completeion c

                 }];

太棒了!小心^^

编辑

去测试它,并意识到我遗漏了一个关键部分。我道歉..但是这段代码确实有效,并且会在一个分组的桌子上做这个动画,它的页面上有很多部分。