1

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

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

我对多线程相当陌生;我还有其他选择吗,或者我必须使用活动指示器或类似的东西吗?

4

2 回答 2

1

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

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

于 2013-03-08T00:21:41.847 回答
0

你可以使用GCD , Raywenderlich 教程

- (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;
    });
}
于 2013-03-08T00:41:30.523 回答