CAAnimation的“animationDidStop:”只调用一次

时间:2012-09-20 00:21:22

标签: objective-c xcode ipad caanimation

我有多组按钮,当点击时,从其原始位置动画到其设定位置。在对象动画后,我希望它从superview中删除。

这是我的animationDidStop代码:

- (void) animationDidStop:(SKBounceAnimation *)animation finished:(BOOL)flag {
        [self.cellImageViewGlobal removeFromSuperview];
        NSLog(@"Animation didStop called");
 }

因此,当我单击一个按钮(self.cellImageViewGlobal)时,它将设置动画,然后在动画之后,它将从superview中删除。在进行点击或点击我将进行,self.cellImageViewGlobal将不会从superview中删除。我发现这个函数只通过我的日志调用一次。

我将自己设置为viewDidLoad中的委托:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.animateProduct.delegate = self; // animateProduct is the last animation being called in the CAAanimationGroup array
}

我还在动画功能中设置了这个委托。 我的代码似乎没有问题。我想每次我都会点击一个按钮,动画结束后它会调用“animationDidStop”函数。

顺便说一下,我尝试了多种方法或解决方案来解决它。首先是我使用了块。块中的动画完成后,将执行以下操作:

completion:^(BOOL finished){

[self.cellImageViewGlobal removeFromSuperview];
}

但是这段代码不会等待模拟器中的动画完成。我在Paul Hegarty的讲座中了解到,在动画代码中,它完成了代码的执行,但它不会等待动画本身(在模拟器中投影)完成。

希望你能帮助我。谢谢!

1 个答案:

答案 0 :(得分:1)

检查flag的值(如果成功终止则应为YES);我有同样的问题(我认为),动画会被立即删除(并且使用flag = NO调用animationdidstop)并且永远不会终止(即使它继续显示)

我正在努力解决这个问题,可能与ARC有关(你在项目中使用ARC吗?)