【问题标题】:CAAnimation's "animationDidStop:" only called onceCAAnimation 的“animationDidStop:”只调用了一次
【发布时间】:2012-09-20 00:21:21
【问题描述】:

我有多组按钮,当单击这些按钮时,它们会从其原始位置动画到其设定位置。对象动画后,我希望将其从超级视图中删除。

这是我的 animationDidStop 代码:

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

所以当我点击一个按钮(即self.cellImageViewGlobal)时,它会动画,然后在动画之后,它会从superview中移除。在接下来的单击或点击中,self.cellImageViewGlobal 不会从超级视图中删除。我发现这个函数只通过我的日志调用一次。

我在 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 的讲座中了解到,在动画代码中,它完成了代码的执行,但它不会等待动画本身(在模拟器中投影)完成。

希望你能帮我解决这个问题。谢谢!

【问题讨论】:

    标签: objective-c xcode ipad caanimation


    【解决方案1】:

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

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

    【讨论】:

    • 我在项目中使用了 ARC。在我的块中的动画完成后,我能够通过使用 alpha 来解决它。动画仍然出现,但它被隐藏了。这解决了我的问题,尽管它只是隐藏的。当我使用 didAnimationStop 方法时,我似乎无法解决它。顺便说一句,祝你的项目好运。谢谢你给我解决方案。下次应该可以用了!
    • 完成:^(布尔完成){ cellImageView.alpha = 0.0000000000000000000001; [cellImageView removeFromSuperview]; }];// 这是我的代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多