开发者

iPhone: How to Stop Animations in a View Before the View Deallocates

开发者 https://www.devze.com 2022-12-24 01:36 出处:网络
I have added custom animation to UITableViewCells. Each cell has its own animation. When I pop the view, the animations 开发者_如何学Gocontinue and I get a bad exec error because the animation is tryi

I have added custom animation to UITableViewCells. Each cell has its own animation. When I pop the view, the animations 开发者_如何学Gocontinue and I get a bad exec error because the animation is trying to access the deallocated cells.

How do I stop the animations before the view is deallocated?

- (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];
}


This thread says that commitAnimations should retain your view, so it should not be deallocated when it's still animating. Maybe you're over-releasing the view somewhere? Build and Analyze (available in Xcode 3.2+ afaik) might help to spot that.


I don't know how your animation code looks like (maybe you could post some?), so I can just guess. Basically, you probably need to implement -viewWillDisappear: method in your view controller and stop any running animations there.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号