gpt4 book ai didi

ios - 渲染 60 张图像导致内存警告

转载 作者:行者123 更新时间:2023-11-29 10:48:09 25 4
gpt4 key购买 nike

我正在渲染 60 张图像并收到内存警告。下面的代码是否有更好的方法?

- (void)change{
for (int aniCount = 1; aniCount < 60; aniCount++) {
if ([UIScreen mainScreen].bounds.size.height == 568) {
self.renderString = [NSString stringWithFormat: @"%i_5.png", aniCount + 1];
self.imageView.image = [UIImage imageNamed:@"1_5.png"];
}else{
self.renderString = [NSString stringWithFormat: @"%i.png", aniCount + 1];
}
// here is the code to pre-render the image
UIImage *frameImage = [UIImage imageNamed:self.renderString];
UIGraphicsBeginImageContext(frameImage.size);
CGRect rect = CGRectMake(0, 0, frameImage.size.width, frameImage.size.height);
[frameImage drawInRect:rect];
UIImage *renderedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

[self.menuanimationImages addObject:renderedImage];
}

self.imageView.animationImages = [NSArray arrayWithArray: self.menuanimationImages];
}

这个方法在我的-(void)viewDidLoad中调用了

应用程序屏幕的示例:https://www.youtube.com/watch?v=2f80UcLhOW8

最佳答案

我们是否从检查屏幕分辨率推断出这些是全屏图像?如果是这样,要制作包含 60 张图像的全屏动画需要大量内存,而且我不会对您收到内存警告感到惊讶。当在 UIImageView 中使用时,每个图像每个像素至少需要四个字节。

对于 4"屏幕上的非视网膜图像,60 张全屏图像大约需要 42mb。如果这些是视网膜图像(分辨率的两倍),则跳到 166mb。不要看 PNG 的大小考虑所用内存量时的文件,因为 PNG 文件有一些压缩,但当您在应用程序中使用它们时它们将被解压缩。

通常您不想使用那么多全屏图像制作动画。您可能会考虑使用 UIKit 动画或核心动画(或其他类似技术)以编程方式为 View 设置动画。或者,如果您真的必须使用一系列图像,看看是否可以将动画部分限制在屏幕的较小部分,从而使用较小的图像并需要更少的内存。

不知道动画长什么样就不好说了。如果您描述动画(或向我们展示一两个屏幕快照),我们可能会建议内存占用少得多的方法。


在您的评论中,您分享了一个具有所需万花筒效果的 link to a video。几个想法:

  1. 我会首先关注渲染千变万化效果的编程方法。考虑到这里的复杂性,这可能会促使我研究“OpenGL ES”方法来呈现这种千变万化的效果。您甚至可能会遇到一些现有的实现。

  2. 我注意到 CIKaleidoscopeCITriangleKaleidoscope 有 Core Image 过滤器,它们可能有助于生成您正在寻找的效果(请参阅 Core Image Filter Reference关于这两个过滤器的信息)。我不认为这些在这里会很合适,但请检查一下。

  3. 上述以编程方式渲染万花筒的尝试失败了,但令我印象深刻的是,鉴于万花筒效果似乎是,您至少可以将当前实现的内存需求减少四分之一水平和垂直对称。因此,理论上您可以为左上象限设置一系列图像,然后将其他三个图像渲染为同一图像的变换。

  4. 或者您也可以创建全屏视频并使用 media player framework 播放它。

在我尝试通过一系列全屏图像制作动画之前,我可能会用尽所有这些询问。全屏图像将成为解决此类问题的一种内存效率低下的方法,您几乎肯定会遇到挑战。如果您曾经考虑过应用程序的 iPad 再现或想要考虑更长的序列,那么一系列全屏图像的方法可能是完全站不住脚的。

关于ios - 渲染 60 张图像导致内存警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21633593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com