1

我正在尝试运行两个 UImageView,它们具有多个动画数组,它们根据用户所做的选择加载和制作动画。例如,这是一种方法:

-(void)initiateAnimations {

nullAnimation = [NSArray arrayWithObjects:

          [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"null0002" ofType:@"png"]],
          [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"null0003" ofType:@"png"]],
          [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"null0004" ofType:@"png"]],
          [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"null0005" ofType:@"png"]],
          [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"null0006" ofType:@"png"]],
          [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"null0007" ofType:@"png"]],
          [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"null0008" ofType:@"png"]],
          [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"null0009" ofType:@"png"]],
          [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"null0010" ofType:@"png"]], nil];
}

这是一个IBAction调用动画方法:

-(IBAction)nullani {
player.animationImages = nullAnimation;
player.animationDuration = 0.50;
player.animationRepeatCount = 1;
[player startAnimating];
}

一开始一切都很好,但请记住,我有大约 5-6 个其他动画数组,大致具有相同大小的图像。它们不是很大,从 12-80k .png 文件不等。当我尝试几次后制作动画时,我在输出中收到此错误:

2013-03-16 01:34:44.438 [3316:907] Received memory warning.

收到此消息后,加载的任何新动画都会使应用程序崩溃。我通过 Instruments 运行它并且找不到任何泄漏,并且输出在崩溃时没有给我任何信息。

这里有内存问题吗?我怎样才能摆脱这个问题?谢谢。

4

1 回答 1

0

一些想法:

1) 永远不要将超过 1 个动画加载到数组中。停止一个动画并准备开始另一个动画后,删除第一个动画并将观看者看到的图像替换为应该显示的单个图像。如果您可以确定显示的确切图像(并且对此表示怀疑),那么您可以用单个图像替换阵列并且图像不会闪烁。

2)如果你不能做1),那么尝试直接使用Core Animation(你需要做更多的工作),然后自己做动画。这使您可以更好地控制内存使用(您可以在文件系统上缓存图像位图)。

3) 使用 Mac 和 AVFoundation 或 QTKit,从图像制作动画,然后创建您开始和停止的“电影”,而不是图像序列。在这种情况下,您将用电影对象替换捆绑包中的静态图像。

于 2013-03-16T20:28:15.357 回答