我正在使用UIGraphicsBeginPDFContextToData创建具有多个页面的PDF文件。一切都运行正常...我的问题是,当应用程序创建更大量的页面,1 PDF,它冻结了一小段时间,我无法控制用户界面。 PDF文件已正确创建,但我想显示加载屏幕或类似的东西。我在UIAleIndicator中测试的所有内容都像UIAlertView,或者只是工具栏中的UIActivityIndicator,在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;
}
答案 0 :(得分:2)
我假设您正在主/ UI线程上创建PDF文件,并导致应用程序在PDF文件非常大时冻结。由于您阻止了UI线程,因此无法运行任何活动指示器并显示进度。解决方案是在单独的线程上运行PDF创建方法,并在作业完成后,向UI发送通知。通过这种方式,您可以获得活动指示符,并在从PDF创建线程收到通知时将其关闭。