iOS - [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context :)]过早调用

时间:2013-11-20 12:37:49

标签: ios iphone ipad animation uiview

我有一个带有

UIView动画
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)] 

出于某种原因,在动画结束之前调用animationDidStop:finished:context:。 有任何想法吗? (在iOS7模拟器上测试)

代码:

-(void)checkForAndRemoveTable {

//The animation should fade to 0 then remove itself from it's superview at the end.

if (tableViewController.view.superview != nil) {

    [UIView beginAnimations:@"dismissTable" context:NULL];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
    tableViewController.view.alpha = 0;
    [UIView commitAnimations];

}


}


-(void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {

if ([animationID isEqualToString:@"dismissTable"]) {

     [tableViewController.view removeFromSuperview];
}


}

2 个答案:

答案 0 :(得分:2)

尝试使用基于块的动画。毕竟,Apple建议从iOS 4开始这样做。

if (tableViewController.view.superview != nil) {
    [UIView animateWithDuration:0.5 delay:0.0 options:kNilOptions animations:^{
        tableViewController.view.alpha = 0;
    } completion:^(BOOL finished) {
        [tableViewController.view removeFromSuperview];
    }];
}

或者,这种行为可能来自于滥用该功能。例如,如果发生一个快速连续多次调用动画函数的事件,则可能导致动画回调的定时出现。 (见下面的评论)

答案 1 :(得分:0)

在iOS 4及更高版本中,使用基于块的动画方法。 (推荐) - > apple docs

使用[UIView animateWithDuration:animations:completion:]方法