我有一个类,用于生成要由用户打印的图像。这些图像是使用QuartzCore(和一些UIKit元素)创建的,需要在主线程上运行。
在生成图像时用户可见的视图中,我有一个进度条。此视图是执行打印的类的委托,并且视图上的打印机调用方法以更新进度条。问题是,进度条在打印机完成之前不会明显更新,因为打印机堵塞了主线程。我无法移动主线程的进度条,因为所有UI更新都必须在主线程上完成。
我对多线程很新;我有其他选择,还是必须使用活动指示器或类似的东西?
答案 0 :(得分:1)
更新代码,以便在后台线程上完成图像创建。这应该是安全的。
然后你可以调用主线程来更新进度条。
答案 1 :(得分:0)
您可以使用GCD,Raywenderlich Tutorial
- (void)generatePage
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
/*
Here you can generate page and update progress
For example:
*/
[self updateProgress:10.0f];
sleep(1000);
[self updateProgress:20.0f];
sleep(3000);
[self updateProgress:100.0f];
});
}
- (void)updateProgress:(float)progress
{
dispatch_async(dispatch_get_main_queue(), ^{
progressView.progress = progress;
});
}