Quartz绘图操作期间的UIActivityIndi​​cator

时间:2010-03-10 00:24:56

标签: iphone

我知道要使用UIActivityIndi​​cator,你必须在主线程中启动它,然后在后台线程上执行长时间运行的操作。我也明白所有UIKit操作也应该在主线程上完成。

但我现在面临的是使用Quartz CGContext绘图方法创建CALayers的长期运行操作,我想知道是否可以在后台线程中执行Quartz内容以便我可以显示活动指示器而我的复杂图表正在被绘制?

我对Quartz很新,不得不承认我在这方面很容易迷失方向。我希望它与UIKit的不同之处在于允许背景上下文绘制操作。

2 个答案:

答案 0 :(得分:2)

关闭NSThread并绘制您通过CGBitmapContextCreate创建的上下文。完成后,使用-[NSObject performSelectorOnMainThread:withObject:waitUntilDone:]将您从CGBitmapContextCreateImage获取的图像发送回主线程,以分配给CALayer的{​​{1}}媒体资源。确保您的绘图代码是线程安全的。

答案 1 :(得分:0)

您不使用Quartz CGContext绘图方法创建CALayers。您使用CGContext绘图方法绘制到CALayers中。这种情况发生在运行循环的绘制阶段,当它调用drawInContext:时,你无法控制发生在哪个线程上(或者甚至当它真的发生时)。您希望尽可能快地保留它们,因此对于复杂的图层,您应该尽可能地预先计算并保存答案,路径等。

我觉得你可能意味着别的东西。你是什​​么意思“创建CALayers?”