iPad使用加载动画创建PDF

时间:2011-05-02 01:55:41

标签: ipad pdf

我正在使用UIGraphicsBeginPDFContextToData创建具有多个页面的PDF文件。一切都运行正常...我的问题是,当应用程序创建更大量的页面,1 PDF,它冻结了一小段时间,我无法控制用户界面。 PDF文件已正确创建,但我想显示加载屏幕或类似的东西。我在UIAleIndicator中测试的所有内容都像UIAlertView,或者只是工具栏中的UIActivityIndi​​cator,在PDF完成后显示。

这是我创建NSData对象的方法。 NSLog显示正确的输出: 我真的不知道如何显示创建PDF的进度。显示当前页面的简单UILabel就是我需要的。

- (NSData *)createPDFData:(int)type {

    NSLog(@"START");

    NSMutableData *pdfData = [NSMutableData data];
    UIGraphicsBeginPDFContextToData(pdfData, drawImage.bounds, nil);

    if (type == 1) {
        UIGraphicsBeginPDFPage();
        if ([self loadPDFBackground]) [paperImage drawRect:paperImage.bounds];
        [drawImage drawRect:drawImage.bounds];
    } else if (type == 2) {
        NSArray *images = [NSArray arrayWithArray:[self loadImagesForPDF]];
        int imageCount = [images count];
        for (int i=0; i<imageCount; i++) {

            NSLog(@"%@", [NSString stringWithFormat:@"Page %i of %i", i+1, imageCount]);

            drawImage.image = [images objectAtIndex:i];
            UIGraphicsBeginPDFPage();
            if ([self loadPDFBackground]) [paperImage drawRect:paperImage.bounds];
            [drawImage drawRect:drawImage.bounds];
        }
    }

    UIGraphicsEndPDFContext();

    NSLog(@"END");

    return pdfData;
}

1 个答案:

答案 0 :(得分:2)

我假设您正在主/ UI线程上创建PDF文件,并导致应用程序在PDF文件非常大时冻结。由于您阻止了UI线程,因此无法运行任何活动指示器并显示进度。解决方案是在单独的线程上运行PDF创建方法,并在作业完成后,向UI发送通知。通过这种方式,您可以获得活动指示符,并在从PDF创建线程收到通知时将其关闭。