我有一个带有
的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];
}
}
答案 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:]
方法