我正在尝试将 UIImage 数据存储在 NSArray 中,实际上是60张图片,每张图片大小为300kb。然后,我试图在 UIImageView 中为这些图像制作动画。
我的代码:
NSMutableArray *arr = [[NSMutableArray alloc] init];
for (int i=0; i<61; ++i) {
[arr addObject:[UIImage imageNamed:[NSString stringWithFormat:@"%i.png", i]]];
}
img.animationImages = arr;
img.animationDuration = 1.5;
img.contentMode = UIViewContentModeBottomLeft;
[img startAnimating];
当我在iPad模拟器4.3中测试它时,它工作正常
当我想在我的设备(iPad 1)上测试它时,应用程序崩溃。
注意:如果我对此代码发表评论,应用不会崩溃: [img startAnimating];
的 1。可能是什么问题呢?我认为这是记忆问题......?!
2.我可以在NSArray中存储一些UIImages吗?
答案 0 :(得分:4)
您的png文件可能有300KB,但这是一种压缩格式。
要了解图像本身的大小,您应该将每个像素的宽度,高度和字节相乘。
即。如果图像的大小为1024 * 1024和RGBA模型,则图像本身在内存中的大小为4MB。这只是一张图片。如果你有300,它大概是120MB。
注意:这只是一个粗略的经验法则,但它会给你一个想法。
因此,您应该在数组中保留路径名并仅在需要时加载图像,并且应缩小缩略图并将其作为文件存储在磁盘上。不要只缩放UIImageView。
以下是a great article,其中包含有关调整大小的代码。
答案 1 :(得分:1)
我用另一种方式解决了应用程序崩溃问题:我尝试使用简单的 NSTimer 。对于每次迭代,我将第n个图像设置为 UIImageView :
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:.03 target:self selector:@selector(tiktak) userInfo:nil repeats:YES]; int n = 0; -(void)tiktak { n++; img.image = [UIImage imageNamed: [NSString stringWithFormat:@"Blue Menu_%i.png", n]]; if(nn == 60) nn = 0; }
动画很神奇。我还在Activity Monitor中对它进行了测试,CPU使用率为6%甚至更低。
答案 2 :(得分:0)
我不建议你在NSArray中存储许多UIImages,它的方式过于沉重和低效。这些图像来自哪里(捆绑,互联网,设备的图库)?
编辑:我不知道你想要它看起来如何,但你可以使用UIImages的名称构建数组,然后加载UIImage并显示它。像这样:
for(i=0;i<60;i++){
NSString *nameOfPicture=[NSString stringWithFormat:@"picture_%d",i+1]
[array addObject:nameOfPicture];
}