2011-01-22 71 views
0

我正在用OpenGL ES视图制作iOS应用程序。在3D视图的顶部,我使用Cocoa Touch绘制各种GUI位。高CPU负载延迟UIView重绘(iOS)

只要帧率良好,此功能就可以正常工作。但是,当CPU负载变高(GLES视图下降到20英里FPS)时,看起来下一个UIKit显示周期正在推进。

具体来说,我试图显示一个工具提示视图,基于各种UIView子类。当显示它时,我更新工具提示标签文本并调整其背景大小,然后将主要UIView的隐藏设置为NO,并调用setNeedsDisplay和setNeedsLayout。

当帧率较低时(即CPU负载较高),下一个显示周期似乎无限期地向前推进。但是,当CPU负载下降时,立即显示视图。

有没有什么办法可以在我的3D引擎重绘之间在UIKit中煽动绘制循环?任何其他想法?

回答

0

在iPhone上,除非另有说明,否则所有应用程序都会在一个线程上执行其UI绘制和逻辑。

你可以将你的3D绘图代码到另一个线程:

[NSThread detachNewThreadSelector:@selector(3DRenderingMethod) toTarget:self withObject:nil] 

这里的相关文件:http://developer.apple.com/library/iOS/#documentation/Cocoa/Reference/Foundation/Classes/NSThread_Class/Reference/Reference.html

+0

所有逻辑和一个线拉拽运行(这是他们在我的应用程序做)的罚款。要点是,CPU负载过高似乎会无限期地推动UIKit重绘,尽管我绝对不会阻止主线程。当CPU负载很高时,UIKit似乎有意跳过重绘;这是我想要在特定情况下防止的。 – Simplex 2011-01-22 14:50:14