0

这是我在这里的第一篇文章-但我已经阅读了很长时间。非常感谢这个网站!:-)

我目前正在将我的基于 XNA 的 2D 引擎从 WP7 移植到 iOS (5)。我宁愿不直接使用 OpenGL,因为我更愿意把时间花在游戏上而不是技术上。所以我很高兴得到一个不涉及 OpenGL(直接)的答案。

问题:当我将 UIImageView 添加到另一个 UIView 时,在 UIImageView 被绘制之前会有短暂的延迟。我假设,这是由于 UIView 类在内部将所有内容转换为 OpenGL 然后绘制之前执行的缓存。

我想要什么:告诉 UIView(超级视图)对所有子视图执行所有必要的计算,然后一次绘制它们。目前我观察到的行为是:计算 uiimageview_1,绘制 uiimageview_1,计算 uiimageview_n,绘制 uiimageview_n,...

我想要的虚拟代码:

// put code here to tell superview to pause drawing
for (int i = 0; i < 400; i ++)
{
    add UIImageView[i] to superview;
}
// put code here to tell superview to draw now

可能的解决方法(但来自 C# 和 Windows,我不知道如何在 iOS 上的 Objective-C 中有效地实现它) - 我担心这段代码效率低下,因为必须传输大块 RAM(每帧!)视网膜以原始分辨率显示:

for (int i = 0; i < 400; i ++)
{
    add UIImageView[i] to superview;
}
// put code here to get a bitmap in ram from superview
// return bitmap and draw it in a view for the scenery/canvas

任何有关如何解决此“弹出”问题的帮助将不胜感激。

谢谢

4

2 回答 2

1

回答这个问题会有点棘手。Cocoa Touch 的确切行为没有记录(Apple 说“实现细节”),因此只能根据猜测和经验给出建议。

您可能想尝试 CoreAnimation,而不是使用 UIViews。它抽象了 2D 绘图和合成操作,而没有 UI 框架(如 UIKit)的开销。它也比直接编程 OpenGL 更容易使用。UIKit 使用 CoreAnimation 进行绘图,但在许多方面对其进行了增强。这种“增强”可能正是您遇到性能问题的原因。

Have a look at the tutorial and judge for yourself.

于 2012-10-29T10:39:30.257 回答
0

首先 - 忘记 UIKit 的观点。如果您尝试将 XNA 游戏移植到 iOS,我建议您熟悉 Cocos2D。它比核心 OpenGL 更方便,它会为您提供所需的性能。

于 2012-10-29T10:30:49.933 回答