iOS - [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)] 调用太快了

Posted

技术标签:

【中文标题】iOS - [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)] 调用太快了【英文标题】:iOS - [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)] called too soon 【发布时间】:2013-11-20 12:37:48 【问题描述】:

我有一个带有

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




【问题讨论】:

【参考方案1】:

尝试使用基于块的动画。毕竟,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];
    ];

或者,这种行为也可能是由于对函数的滥用造成的。例如,如果发生快速连续多次调用动画函数的事件,则可能导致动画回调的计时似乎关闭。 (见下方评论)

【讨论】:

我用这个的时候同样的问题,但是我找到了原因!似乎我错误地调用了包含我的动画的函数两次(来自另一个函数)。请使用“请参阅 cmets 以获取解决方案”来更新您的答案。谢谢。【参考方案2】:

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

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

【讨论】:

以上是关于iOS - [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)] 调用太快了的主要内容,如果未能解决你的问题,请参考以下文章

IOS将UIVIew中的UIImageView扁平化为单个UIView [重复]

iOS动画1 — UIView动画

如何在 iOS 中使用 UIView 动画显示 UIView,如 UIAction 表?

iOS UIView设置圆角

ios uiview封装动画(摘录)

[iOS]视图与UIVIew