0

我已经开始在我的新应用中使用 CoreAnimation,我使用 CA 来制作一些很酷的动画。但我是目标 C 的新手,对我来说很难,我面临着这个大问题:

我制作了一个自定义 UIView:customView,我使用 xib 来获取用户界面并设置 IBOutlet,自定义视图是一个简单的小视图,里面有一个 UIImageView。

在我的视图控制器中,我创建了一个插入多个 customView 的循环,在这个循环中,我为视图和 imageView 设置了一个 CAnimation :

for (int i = 0 ; i < 8 ; i ++ )
{

    CABasicAnimation *balanceAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
  // ... set Animation here...    
    [customView.myImgView.layer addAnimation:balanceAnimation forKey:nil];

    CABasicAnimation *moveUp3Bis;
    // ... setting animation here...
    moveUp3Bis.repeatCount = 1;

    [customView.layer addAnimation:moveUp3Bis forKey:nil];

}

只要在 10 秒延迟后视图控制器是当前控制器,我就调用此循环

所以视图得到动画,移动,并在主窗口旁边,但经过很长一段时间动画变得越来越慢......

当然我知道我的循环添加到堆栈太多customView,视图没有释放(可能是因为动画还在?)

我认为视图会在一段时间后发布,但我认为视图将永远移动。可能我需要设置一个指向我的视图的指针并在延迟后释放它吗?我敢肯定 CA 已经为这种情况计划了一些东西?

但我不知道我能做什么?

感谢您的任何帮助。

4

2 回答 2

0

你试过设置-[CABasicAnimation removedOnCompletion]吗?

看起来它的默认值是YES,所以我认为这不是您的问题,但值得研究。


您是否尝试过使用 Profile 来查看是什么让一切都变慢了?

于 2013-05-30T20:48:55.810 回答
0

从您添加的代码片段中很难看出您对视图做了什么,但您绝对必须将它们从其父视图中删除,否则它们将不会被释放。

所以我建议你应该在开始循环之前尝试删除视图,这样你就有一个很酷的动画,你应该只在没有动画的情况下删除一个视图,为此你必须为你的使用您当前的方法制作动画,addAnimation:balanceAnimation forKey:nil而不是将其设置为 nil,并检查视图的图层animationKeys是否为空或 nil,然后动画完成,如果不是仍在动画中。

于 2013-05-30T21:50:36.130 回答