Objective c 使用图像序列的iPad短动画

Objective c 使用图像序列的iPad短动画,objective-c,performance,ipad,uiimageview,Objective C,Performance,Ipad,Uiimageview,我有好几篇关于这个的帖子,但到目前为止我还没有看到任何令人信服的东西。 假设我只需要3个透明的小动画,其中有以下图像 动画1-15幅png图像,尺寸为322*366。 动画2-3个png图像,尺寸为930*480。 动画3-2幅png图像,尺寸为83*364。 我使用UIImageviews animationImages制作了这3个动画,它有一点延迟。我只想做几秒钟的动画 除了播放视频,还有更好的方法吗 有人知道iPad上的图像序列是如何排列的吗,关于性能等 谢谢。使用UIImageView的

我有好几篇关于这个的帖子,但到目前为止我还没有看到任何令人信服的东西。 假设我只需要3个透明的小动画,其中有以下图像

动画1-15幅png图像,尺寸为322*366。

动画2-3个png图像,尺寸为930*480。

动画3-2幅png图像,尺寸为83*364。

我使用UIImageviews animationImages制作了这3个动画,它有一点延迟。我只想做几秒钟的动画

  • 除了播放视频,还有更好的方法吗

  • 有人知道iPad上的图像序列是如何排列的吗,关于性能等


  • 谢谢。

    使用
    UIImageView
    animationImages
    属性

     // create the view that will execute our animation
     UIImageView* campFireView = [[UIImageView alloc] initWithFrame:self.view.frame];
     // load all the frames of our animation
     campFireView.animationImages = [NSArray arrayWithObjects:    
                                 [UIImage imageNamed:@"campFire01.gif"],
                                 [UIImage imageNamed:@"campFire02.gif"],
                                 [UIImage imageNamed:@"campFire03.gif"],
                                 [UIImage imageNamed:@"campFire04.gif"],
                                 [UIImage imageNamed:@"campFire05.gif"],
                                 [UIImage imageNamed:@"campFire06.gif"],
                                 [UIImage imageNamed:@"campFire07.gif"],
                                 [UIImage imageNamed:@"campFire08.gif"],
                                 [UIImage imageNamed:@"campFire09.gif"],
                                 [UIImage imageNamed:@"campFire10.gif"],
                                 [UIImage imageNamed:@"campFire11.gif"],
                                 [UIImage imageNamed:@"campFire12.gif"],
                                 [UIImage imageNamed:@"campFire13.gif"],
                                 [UIImage imageNamed:@"campFire14.gif"],
                                 [UIImage imageNamed:@"campFire15.gif"],
                                 [UIImage imageNamed:@"campFire16.gif"],
                                 [UIImage imageNamed:@"campFire17.gif"], nil];
    
     // all frames will execute in 1.75 seconds
     campFireView.animationDuration = 1.75;
     // repeat the annimation forever
     campFireView.animationRepeatCount = 0;
     // start animating
     [campFireView startAnimating];
     // add the animation view to the main window 
     [self.view addSubview:campFireView];
    

    使用
    UIImageView
    animationImages
    属性

     // create the view that will execute our animation
     UIImageView* campFireView = [[UIImageView alloc] initWithFrame:self.view.frame];
     // load all the frames of our animation
     campFireView.animationImages = [NSArray arrayWithObjects:    
                                 [UIImage imageNamed:@"campFire01.gif"],
                                 [UIImage imageNamed:@"campFire02.gif"],
                                 [UIImage imageNamed:@"campFire03.gif"],
                                 [UIImage imageNamed:@"campFire04.gif"],
                                 [UIImage imageNamed:@"campFire05.gif"],
                                 [UIImage imageNamed:@"campFire06.gif"],
                                 [UIImage imageNamed:@"campFire07.gif"],
                                 [UIImage imageNamed:@"campFire08.gif"],
                                 [UIImage imageNamed:@"campFire09.gif"],
                                 [UIImage imageNamed:@"campFire10.gif"],
                                 [UIImage imageNamed:@"campFire11.gif"],
                                 [UIImage imageNamed:@"campFire12.gif"],
                                 [UIImage imageNamed:@"campFire13.gif"],
                                 [UIImage imageNamed:@"campFire14.gif"],
                                 [UIImage imageNamed:@"campFire15.gif"],
                                 [UIImage imageNamed:@"campFire16.gif"],
                                 [UIImage imageNamed:@"campFire17.gif"], nil];
    
     // all frames will execute in 1.75 seconds
     campFireView.animationDuration = 1.75;
     // repeat the annimation forever
     campFireView.animationRepeatCount = 0;
     // start animating
     [campFireView startAnimating];
     // add the animation view to the main window 
     [self.view addSubview:campFireView];
    

    如果不想缓存图像并且无法检索回该内存,可以使用-initWithContentOfFile:函数而不是-imageNamed:

    问题是,当您启动动画时(
    [campFireView startAnimating]
    ),系统将解压缩campFireView的所有图像并将其保留在内存中。它肯定会占用大量的内存空间


    请注意,调用
    [campFireView release]

    时,将正确释放此内存空间。如果您不想缓存映像并且无法检索该内存,可以使用-initWithContentOfFile:函数而不是-imageNamed:

    问题是,当您启动动画时(
    [campFireView startAnimating]
    ),系统将解压缩campFireView的所有图像并将其保留在内存中。它肯定会占用大量的内存空间


    请注意,调用
    [campFireView release]

    时会正确释放此内存空间。当我们向数组中添加图像时,会说[UIImage imageNamed:@“1.png]”,图像将被正确缓存?。我很担心应用程序的内存。我也是这样做的,第一次运行动画时,我得到了半秒的延迟。“在那之后就好了。@deamonsarea:如果我们用imeges定义动画,那将是一个消耗大量内存的操作。。。需要保护内存,并在不需要时释放…如何清除缓存的图像?。有专门的功能吗?即使你释放了你的视图,图像也会被缓存,最终你会面临内存危机。看看这个,我用NSTimer解决了这个问题。它成功了。不过感谢贾利亚的帮助。当我们向数组中添加图像时说[UIImage ImageName:@“1.png”],图像将被缓存,对吗?。我很担心应用程序的内存。我也是这样做的,第一次运行动画时,我得到了半秒的延迟。“在那之后就好了。@deamonsarea:如果我们用imeges定义动画,那将是一个消耗大量内存的操作。。。需要保护内存,并在不需要时释放…如何清除缓存的图像?。有专门的功能吗?即使你释放了你的视图,图像也会被缓存,最终你会面临内存危机。看看这个,我用NSTimer解决了这个问题。它成功了。不过还是要感谢贾利亚的帮助。