iPhone:如何在视图取消分配之前停止视图中的动画

时间:2010-03-23 11:08:50

标签: iphone animation uitableview dealloc

我已将自定义动画添加到UITableViewCells。每个单元格都有自己的动画。当我弹出视图时,动画继续,我得到一个错误的exec错误,因为动画正在尝试访问解除分配的单元格。

如何在取消分配视图之前停止动画?

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {  
    self.Currentcell = [tableView cellForRowAtIndexPath:indexPath];
    [UIView beginAnimations:@"fade" context:nil];
    [UIView setAnimationDuration:0.4];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
    [self.Currentcell.accessoryView viewWithTag:1].alpha = 0;
    [self.Currentcell.accessoryView viewWithTag:2].alpha = 1;
    [UIView setAnimationDidStopSelector:@selector(animationEnded:finished:context:)];
    [UIView setAnimationDelegate:self];
    [UIView commitAnimations];
}

- (void)animationEnded:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {  
    [UIView beginAnimations:animationID context:context];
    [UIView setAnimationDuration:0.3];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
    [cell.accessoryView viewWithTag:1].alpha = 1;
    [cell.accessoryView viewWithTag:2].alpha = 0;
    [UIView commitAnimations];
}

2 个答案:

答案 0 :(得分:1)

This thread表示commitAnimations应该保留您的视图,因此在它仍然是动画时不应该取消分配。也许你在某个地方过度释放视图?构建和分析(在Xcode 3.2+ afaik中提供)可能有助于发现这一点。

答案 1 :(得分:0)

我不知道你的动画代码是什么样的(也许你可以发布一些?),所以我可以猜测。基本上,您可能需要在视图控制器中实现-viewWillDisappear:方法并停止那里正在运行的动画。