【问题标题】:First time Image animation takes long time to animating第一次图像动画制作动画需要很长时间
【发布时间】:2013-06-11 08:54:44
【问题描述】:

在我的应用程序中有 260 张图像的动画.jpg 文件的尺寸为 640*1136。我将所有图像加载到数组中,如下所示。

点击按钮

- (void)singButtonClick:(id)sender
{
    [self initSingArray];
    [self startAnimationWithImages:singArray duration:2];
}

它将分配初始化我的数组,并从资源文件夹中加载所有 260 个图像

self.imageArray = [[NSBundle mainBundle] pathsForResourcesOfType:@"jpg" inDirectory:nil];


- (void)initSingArray
{
    if (!singArray)
    {
        singArray=[[NSMutableArray alloc] init];

        for(NSString *str in self.imageArray)
        {
            if([[str lastPathComponent] hasPrefix:@"Sing_"])
            {
                [singArray addObject:[UIImage imageNamed:[str lastPathComponent]]];
            }
        }
    }
}

对于图像动画,只需使用该数组并将其传递给 UIImageView

- (void)startAnimationWithImages:(NSMutableArray*)images duration:(NSTimeInterval)duration
{
    [self startAnimationWithImages:images duration:duration repeatCount:1];
}

- (void)startAnimationWithImages:(NSMutableArray*)images duration:(NSTimeInterval)duration repeatCount:(int)repeatCount
{
    if (self.gifImageView.isAnimating) 
    {
        [self.gifImageView stopAnimating];
    }

    self.gifImageView.animationImages = nil;
    self.gifImageView.animationImages = images;          // Animated image array
    self.gifImageView.animationDuration = duration;      // Perform a full animation when
    self.gifImageView.animationRepeatCount = repeatCount;// Animation number of repetitions
    [self.gifImageView startAnimating];
}

但是当第一次点击按钮时,动画需要很长时间。当图像数量较少时,它会正常工作。

图像的尺寸会产生问题吗?

请帮我解决。

注意:我发现很多帖子与此问题相关,但没有一个可以帮助我解决此问题。

【问题讨论】:

  • 好吧,所有这些图像都必须先加载到内存中才能显示。当您拥有较少的图像时,此过程所需的时间较短(显然)。您必须预加载图像。您说相关帖子对您的问题没有帮助 - 为什么?您不想预加载图片吗?
  • @Kreiri:是的,我预加载了所有图像,但是在单击按钮时,动画需要时间。还有一件事,当我单击另一个动画的下一个按钮(在另一个数组中加载其他图像)时,它会崩溃。
  • 第二次崩溃肯定是因为你的内存不足。
  • @Kreiri :我认为会的。实际上我正在创建像会说话的汤姆这样的应用程序,所以我必须使用许多图像来制作动画。所以你能帮我解决一下吗?感谢您的回复
  • 并非如此。你必须重新考虑你的设计。

标签: iphone objective-c ipad uiimageview uianimation


【解决方案1】:

您必须在viewDidLoad 或其他地方执行此操作[self initSingArray];,而不是单击按钮。它会解决你的问题。在您的情况下,原因是第一次创建图像数组,因此需要时间。

【讨论】:

    【解决方案2】:

    imageview-animation-getting-more-memory 上查看我对同类问题的回答。底线是你永远不会让你的应用程序使用 animationImages 方法和很多像你一样的图像工作。您最好使用已经解决内存问题的现有解决方案,并提供一种方法来避免在动画开始显示之前将所有图像数据解码到内存中(这就是开始动画如此缓慢的原因)。

    【讨论】:

      【解决方案3】:

      经过大量的研发,最后我通过一些 grate 博客文章解决了这个问题。我的应用程序成功运行,没有崩溃问题并且响应速度很快。

      而不是使用 UIImageView 来制作动画试试这个花格教程Memory_usage_on_ios

      simplified PNG animation example code

      希望这个答案能帮助人们在没有内存泄漏问题的情况下制作大量图像帧的动画。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-08
        • 1970-01-01
        • 2016-01-06
        • 1970-01-01
        • 2019-04-15
        • 2013-08-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多