您好,匿名用户
随意问技术百科期待您的加入

用UIImageView实现动画时内存管理问题

+2 投票

我有一组序列帧,想用UIImageView来做成动画。我的代码如下

UIImageView* campFireView = [[UIImageView alloc] initWithFrame:self.view.frame];
        
        NSMutableArray *moviesSourceArray = [NSMutableArray arrayWithCapacity:200];
        int i = 1;
        
        for (i = 1; i <= 100; i++) {
            NSString *imageName;
            imageName = [NSString stringWithFormat:@"image%i.png",i];
            [moviesSourceArray addObject:[UIImage imageNamed:imageName]];
        }
                
        campFireView.animationImages = moviesSourceArray;
        
        campFireView.animationDuration = 1.75;
        
        campFireView.animationRepeatCount = 0;
        
        [campFireView startAnimating];
        
        [controller.view addSubview:campFireView];
        [campFireView release];

我的序列帧图片比较多,一共40M的样子,200张。如果全部图片都加入进来播放的话就会崩溃,减少到100张能正常运行。有没有其他比较好的办法或者优化方案来实现播放完整动画而又不会出现这样内存占用太多崩溃的情况呢?

用户头像 提问 2012年 12月1日 @ Udyr 上等兵 (341 威望)
分享到:

2个回答

0 投票

果断存成mov,用个视频view播放啊

别说40M。10M图片在iOS6上让你崩不是啥难事。

用户头像 回复 2012年 12月1日 @ Teemo 上等兵 (318 威望)
+1 投票

动态加载图片啊,不要把图片一下全部加在进去。下面的代码可供参考。

imgV=[[UIImageView alloc]initWithFrame:CGRectMake(40, 40, 128, 128)];
[self.window addSubview:imgV];
[self performSelectorInBackground:@selector(playAnim)withObject:nil];

[imgV release];
-(void)playAnim{
for (int i=0;i<101;){
usleep(100000);
UIImage *image=[[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%d",i+1 ] ofType:@"tiff"]];
[self performSelectorOnMainThread:@selector(changeImage:) withObject:image waitUntilDone:YES];
i++;

}

-(void)changeImage:(UIImage*)image{
imgV.image=image; 
}

用户头像 回复 2012年 12月11日 @ Rumble 上等兵 (394 威望)
提一个问题:

相关问题

+1 投票
1 回复 93 阅读
0 投票
1 回复 42 阅读
用户头像 提问 2012年 12月1日 @ Apple 上等兵 (542 威望)
0 投票
1 回复 43 阅读
0 投票
1 回复 2 阅读
0 投票
1 回复 39 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...