iOS核心动画和ARC

时间:2013-05-30 20:27:12

标签: ios animation ios6 core-animation

我已经开始在我的新应用中使用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已经计划了类似的案例吗?

但我不知道我该怎么办?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您是否尝试过设置-[CABasicAnimation removedOnCompletion]

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


您是否尝试过使用“个人资料”来查看哪些内容放慢了速度?

答案 1 :(得分:0)

从你添加的代码片段很难说你对你的观点做了什么,但你肯定必须从父视图中删除它们,否则它们将不会被释放。

所以我建议你应该在开始循环之前尝试删除视图,只是为了让你有一个很酷的动画,只有在没有动画的情况下你应该删除一个视图,为此你必须添加一个键使用当前方法addAnimation:balanceAnimation forKey:nil代替动画的字符串,而不是将其设置为nil,如果数组为空或nil,则检查视图的animationKeys图层,如果不是动画,则动画完成。