生成打印页面时更新进度条

时间:2013-03-07 23:04:52

标签: ios objective-c multithreading nsthread uiprogressview

我有一个类,用于生成要由用户打印的图像。这些图像是使用QuartzCore(和一些UIKit元素)创建的,需要在主线程上运行。

在生成图像时用户可见的视图中,我有一个进度条。此视图是执行打印的类的委托,并且视图上的打印机调用方法以更新进度条。问题是,进度条在打印机完成之前不会明显更新,因为打印机堵塞了主线程。我无法移动主线程的进度条,因为所有UI更新都必须在主线程上完成。

我对多线程很新;我有其他选择,还是必须使用活动指示器或类似的东西?

2 个答案:

答案 0 :(得分:1)

更新代码,以便在后台线程上完成图像创建。这应该是安全的。

然后你可以调用主线程来更新进度条。

答案 1 :(得分:0)

您可以使用GCDRaywenderlich 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;
    });
}