0

我在动画序列中使用 150 张图像。

这是我的代码。

NSMutableArray *arrImages =[[NSMutableArray alloc]initWithCapacity:0];

for(int i = 0; i <=158; i++)
{
    UIImage* image = [UIImage imageNamed:[NSString stringWithFormat:@"baby%05d.jpg",i]];
    [arrImages addObject:image];
}

babyimage.animationImages = arrImages;
[arrImages release];

babyimage.animationDuration=6.15; [babyimage startAnimating];

但它占用了太多内存。播放 1 分钟后,它会在控制台中显示内存警告。然后崩溃了。我也降低了图像分辨率,我不能让它低于 150 以获得更好的质量。

有没有更好的方法可以在没有内存问题的情况下制作此动画。非常感谢请帮助...

4

2 回答 2

3

代替

[UIImage imageNamed:[NSString stringWithFormat:@"baby%05d.jpg",i]]

利用

[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"baby%05d.jpg",i] ofType:nil]]

原因是 imageNames 缓存了图像,直到它释放内存警告才释放

编辑

另外,不要将整个图像存储到数组中,如果需要,只需保存图像名称或不保存任何内容。这也将占用大量内存。

于 2013-01-24T09:55:10.997 回答
0

我不知道你没有指定动画是什么。但如果我正在编写代码,我会遵循以下算法。

这是假设在特定时间只显示一个图像,但在过渡期间,您最终将有两个以某种方式卷积。

procedureAnimate:
    photo_1 = allocate(file_address_array[i++])
    while i < MAX_PHOTOS
        photo_2 = allocate(file_address_array[i++])
        photo_3 = allocate(file_address_array[i++])
        perform_animation(photo_1, photo_2)
        release(photo_1)
        photo_1 = photo_2
        photo_2 = photo_3
    release(last_two)

我不确定这是否是做这种事情的完美方式。但这会更有效率。

(分配/释放登录可能存在严重错误,但这与我早上 5.14 的工作是一致的)。如果这不起作用,请告诉我。

于 2013-01-24T10:15:09.493 回答