添加到另一个UIView时UIImageView延迟

时间:2012-10-26 10:48:03

标签: performance ios5 uiview uiimageview

这是我在这里发表的第一篇文章 - 但我很长时间以来一直是读者。非常感谢你对这个网站! : - )

我目前正在研究从WP7到iOS(5)的基于XNA的2D引擎的端口。我不想直接使用OpenGL,因为我更喜欢在游戏中投入时间而不是技术。所以我很乐意得到一个不直接涉及OpenGL的答案。

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

我想要的: 告诉UIView(superview)对所有子视图执行所有必要的计算,然后然后立即绘制 all 。 目前我观察到的行为是:计算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

如何处理这种“爆破”问题的任何帮助都将受到高度赞赏。

由于

2 个答案:

答案 0 :(得分:1)

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

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

查看tutorial并自行判断。

答案 1 :(得分:0)

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