gpt4 book ai didi

objective-c - 如何高效展示多张图片? (iPhone编程)

转载 作者:太空狗 更新时间:2023-10-30 03:28:47 25 4
gpt4 key购买 nike

在我的应用程序中,我需要像粒子系统这样的东西,所以我做了以下事情:

当应用程序初始化时,我加载了一个 UIImage

laserImage = [UIImage imageNamed:@"laser.png"];

UIImage *laserImage 在我的 Controller 的接口(interface)中声明。现在每次我需要一个新粒子时,这段代码都会生成一个:

// add new Laserimage
UIImageView *newLaser = [[UIImageView alloc] initWithImage:laserImage];
[newLaser setTag:[model.lasers count]-9];
[newLaser setBounds:CGRectMake(0, 0, 17, 1)];
[newLaser setOpaque:YES];
[self.view addSubview:newLaser];
[newLaser release];

请注意,图像只有 17px * 1px 小,model.lasers 是一个内部数组,用于执行与图形输出分离的所有计算。所以在我的主绘图循环中,我将所有 UIImageView 的位置设置为我的 model.lasers 数组中的计算位置:

for (int i = 0; i < [model.lasers count]; i++) {
[[self.view viewWithTag:i+10] setCenter:[[model.lasers objectAtIndex:i] pos]];
}

我将标签增加了 10,因为默认值为 0,我不想移动所有带有默认标签的 View 。

因此,动画在处理大约 10 - 20 张图像时看起来不错,但在处理大约 60 张图像时确实变慢了。所以我的问题是:有没有什么方法可以优化它而无需在 OpenGl ES 中重新开始?

最佳答案

正如 jeff7 和 FenderMostro 所说,您使用的是高级 API (UIKit),使用较低的 API(CoreAnimation 或 OpenGL)会获得更好的性能。 (cocos2d 建立在 OpenGL 之上)

  • 您最好的选择是使用 CALayers 而不是 UIImageViews,从您的 UIImage 获取 CGImageRef 并将其设置为这些图层的内容。

  • 此外,您可能希望保留一个 CALayer 池,并在必要时通过隐藏/显示来重用它们。 60 个 17*1 像素的 CALayers 并不多,我已经用数百个 CALayers 做了,不需要额外的优化。

这样,图像将已经解压缩并在显存中可用。使用 UIKit 时,一切都通过 CPU,更不用说创建 UIView 了,它们是非常重的对象。

关于objective-c - 如何高效展示多张图片? (iPhone编程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2507441/

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