1

我的申请在 ARC 中。
我在 imageView 中使用图像动画,但一段时间后我的应用程序因内存不足错误而崩溃。

我在日志中没有收到任何错误消息,但在配置文件工具中,我在分配部分 中收到“内存不足”消息。

我的动画的一个代码是

ImageView= [[UIImageView alloc] init];
[self.view addSubview:ImageView];
ImageView.frame=CGRectMake(0, 0, 480, 342);
ImageView.animationImages = [NSArray arrayWithObjects:
                                  [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image1" ofType:@"png"]],
                                  [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image2" ofType:@"png"]],
                                  [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image3" ofType:@"png"]],
                                  [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image4" ofType:@"png"]],
                                  [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image5" ofType:@"png"]],
                                  [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image6" ofType:@"png"]],
                                  nil];
[ImageView setAnimationRepeatCount:1];
ImageView.animationDuration =1.0;
[ImageView startAnimating];

如果我评论此动画代码,则应用程序运行正常,但我需要在一个视图中显示超过 5 个此类动画。

任何链接,教程,任何想法都会有很大的帮助......

4

2 回答 2

0

Gerharbo 的方法基本上是一个纹理图集,但图像要大得多。我认为您会发现,当您尝试使用许多图像(对于较长的动画)时,这种方法无法很好地扩展。您已经看到由于内存不足而导致的崩溃,因此最好完全避免 UIImageView.animationImages。这篇博客文章video-and-memory-usage-on-ios-devices描述了为什么您不能分配内存来在主内存中保存一堆图像,这正是您上面的代码试图做的事情。如果您在 SO 上环顾四周,您会发现许多其他开发人员也遇到了同样的问题

于 2013-06-21T04:30:14.770 回答
0

你为什么不尝试使用精灵?我尝试使用 CALater(核心动画层)进行动画处理,它就像一个魅力。我为“contentsRect”设置动画。短代码示例(CALayer 子类):

self.contents = [UIImage imageNamed:@"sprite-large.png"].CGImage;

NSMutableArray *frames = [NSMutableArray array]; // array of CGRect's
CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"contentsRect"];
anim.values = frames;
[self addAnimation:anim forKey:nil];

几周前我在 GitHub 上发布了一些代码: https ://github.com/Gerharbo/sprite-animation-layer/

它提供了一个示例精灵(不完美,但它有效)和一些示例代码。

玩得开心动画!

格哈德

于 2013-05-02T20:54:30.763 回答