我知道要使用UIActivityIndicator,你必须在主线程中启动它,然后在后台线程上执行长时间运行的操作。我也明白所有UIKit操作也应该在主线程上完成。
但我现在面临的是使用Quartz CGContext绘图方法创建CALayers的长期运行操作,我想知道是否可以在后台线程中执行Quartz内容以便我可以显示活动指示器而我的复杂图表正在被绘制?
我对Quartz很新,不得不承认我在这方面很容易迷失方向。我希望它与UIKit的不同之处在于允许背景上下文绘制操作。
答案 0 :(得分:2)
关闭NSThread
并绘制您通过CGBitmapContextCreate
创建的上下文。完成后,使用-[NSObject performSelectorOnMainThread:withObject:waitUntilDone:]
将您从CGBitmapContextCreateImage
获取的图像发送回主线程,以分配给CALayer
的{{1}}媒体资源。确保您的绘图代码是线程安全的。
答案 1 :(得分:0)
您不使用Quartz CGContext绘图方法创建CALayers。您使用CGContext绘图方法绘制到CALayers中。这种情况发生在运行循环的绘制阶段,当它调用drawInContext:
时,你无法控制发生在哪个线程上(或者甚至当它真的发生时)。您希望尽可能快地保留它们,因此对于复杂的图层,您应该尽可能地预先计算并保存答案,路径等。
我觉得你可能意味着别的东西。你是什么意思“创建CALayers?”