【问题标题】:frame by frame animation逐帧动画
【发布时间】:2011-01-05 11:01:47
【问题描述】:

我想知道这个动画代码的替代品..

    -(void)movetree{
    //[tree1 release];
    treeMove = YES;
    tree1.animationImages = [NSArray arrayWithObjects: 
        [UIImage imageNamed:@"moving trees1.png"],
        [UIImage imageNamed:@"moving trees2.png"],
        [UIImage imageNamed:@"moving trees3.png"],
        [UIImage imageNamed:@"moving trees4.png"],
        [UIImage imageNamed:@"moving trees5.png"],
        [UIImage imageNamed:@"moving trees6.png"],
        [UIImage imageNamed:@"moving trees7.png"],
        [UIImage imageNamed:@"moving trees8.png"],
        [UIImage imageNamed:@"moving trees9.png"],
        [UIImage imageNamed:@"moving trees10.png"],
        [UIImage imageNamed:@"moving trees11.png"],
        [UIImage imageNamed:@"moving trees12.png"],
        [UIImage imageNamed:@"moving trees13.png"],
        [UIImage imageNamed:@"moving trees14.png"],
        [UIImage imageNamed:@"moving trees15.png"],
        [UIImage imageNamed:@"moving trees16.png"],
        [UIImage imageNamed:@"moving trees17.png"],
        [UIImage imageNamed:@"moving trees18.png"],
        [UIImage imageNamed:@"moving trees19.png"],
        [UIImage imageNamed:@"moving trees20.png"],
        [UIImage imageNamed:@"moving trees21.png"],
        [UIImage imageNamed:@"moving trees22.png"],
        [UIImage imageNamed:@"moving trees23.png"],
        [UIImage imageNamed:@"moving trees24.png"],
        [UIImage imageNamed:@"moving trees25.png"],
        [UIImage imageNamed:@"moving trees26.png"],
        [UIImage imageNamed:@"moving trees27.png"],
        [UIImage imageNamed:@"moving trees28.png"],
        [UIImage imageNamed:@"moving trees29.png"],
        [UIImage imageNamed:@"moving trees30.png"],
        [UIImage imageNamed:@"moving trees31.png"],
        [UIImage imageNamed:@"moving trees32.png"],
        [UIImage imageNamed:@"moving trees33.png"],
        [UIImage imageNamed:@"moving trees34.png"],
        [UIImage imageNamed:@"moving trees35.png"],
        [UIImage imageNamed:@"moving trees36.png"],
        [UIImage imageNamed:@"moving trees37.png"],
        [UIImage imageNamed:@"moving trees38.png"],
        [UIImage imageNamed:@"moving trees39.png"],
        [UIImage imageNamed:@"moving trees40.png"],
        [UIImage imageNamed:@"moving trees41.png"],
        [UIImage imageNamed:@"moving trees42.png"],
        [UIImage imageNamed:@"moving trees43.png"],
        [UIImage imageNamed:@"moving trees44.png"],
        [UIImage imageNamed:@"moving trees45.png"],
        [UIImage imageNamed:@"moving trees46.png"],
        [UIImage imageNamed:@"moving trees47.png"],
        [UIImage imageNamed:@"moving trees48.png"],
        [UIImage imageNamed:@"moving trees49.png"],
        [UIImage imageNamed:@"moving trees50.png"],
        [UIImage imageNamed:@"moving trees51.png"],
        [UIImage imageNamed:@"moving trees52.png"],
        [UIImage imageNamed:@"moving trees53.png"],
        [UIImage imageNamed:@"moving trees54.png"],
        [UIImage imageNamed:@"moving trees55.png"],
        [UIImage imageNamed:@"moving trees56.png"],
        [UIImage imageNamed:@"moving trees57.png"],
        [UIImage imageNamed:@"moving trees58.png"],
        [UIImage imageNamed:@"moving trees59.png"],
        [UIImage imageNamed:@"moving trees60.png"],nil];

 // all frames will execute in 1.75 seconds
 tree1.animationDuration =1.75;
 // repeat the annimation forever
 tree1.animationRepeatCount = 0;
 // start animating

 [tree1 startAnimating];
 // add the animation view to the main window 
 //[bgview addSubview:campFireView];

 [tree1 release]; 

 player.numberOfLoops = -1;
 [player play];


 }

还有其他方法可以使用帧显示动画吗?这种方法似乎更重,而且崩溃很多..

【问题讨论】:

  • 我猜它崩溃了,因为为 60 个 UIImage 分配了太多内存。你能告诉它在哪里崩溃以及错误信息是什么?
  • 它因 EXEC_BAD_ACCESS 崩溃:(
  • 我不确定您是否应该在 startAnimating 之后立即致电 release
  • 不,我无法释放它,因为我不拥有该对象..
  • @Shrey,你在player.numberOfLoops = -1 之前发布了tree1,因为它是自动发布的,不要那样做! :D

标签: iphone objective-c xcode


【解决方案1】:

尝试使用PNG Animation method by Moses DeJong。用他的话来说:

这个例子实现了一个动画 简单的面向视图控制器 等待读取 PNG 图像数据 框架,直到需要。代替 分配许多兆字节,这个类 在大约半兆内存中运行 大约 5-10% 的 CPU 利用率 第二代 iPhone。

我相信它基本上是使用 UIImageView 来缓存 AVAudioPlayer。

【讨论】:

  • 上面提到的 PNG 动画示例将完成基本操作,而不会因内存不足而崩溃(为什么您的代码会崩溃)。在这里可以找到一个更完整且经过显着优化的 cab 实现:modejong.com/AVAnimator
  • 看起来这个人自己说过...嘿@MoDJ,您可以提出建议和编辑,或者甚至更好(对您而言),添加您自己的答案。 ;) - 但感谢您的评论! :)
【解决方案2】:

有一个动画回调,类似于动画完成,[self performSelector:@selector(stopAnimation) withObject:nil afterDelay:3]; 无法记住 - 但通常的方法是,一旦动画完成,这个方法被调用然后你可以释放。通常的 EXC_BAD_ACCESS 可能是您的一个或多个图像不存在,请仔细检查所有图像名称并验证它们是否存在于您的资源文件夹中。但是,据我所知,这是唯一的动画图像。 帮助链接http://iosdevelopertips.com/graphics/animated-gif-animated-images-iphone-style.html

【讨论】:

  • 当我首先调用动画 xib 时会发生什么..一切正常 f9..但是如果我先调用任何其他 xib 然后导航到动画 xib..它会崩溃.. :(跨度>