2011-05-02 100 views
2

我正在使用UIGraphicsBeginPDFContextToData創建帶有多頁的PDF文件。一切工作正常...我的問題是,當應用程序創建一個更大的頁面數量,1 PDF,其凍結一小段時間,我無法控制用戶界面。 PDF文件創建正確,但我想顯示加載屏幕或類似的東西。我在UIActivityIndi​​cator內測試的所有內容都像UIAlertView,或者工具欄中的UIActivityIndi​​cator在PDF完成後顯示。iPad使用加載動畫創建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; 
} 

回答

2

我假設您在主/ UI線程上創建PDF文件,並導致應用程序凍結,如果PDF文件非常大。由於您阻止了UI線程,因此沒有活動指示器可以運行並顯示進度。解決方案是在單獨的線程上運行PDF創建方法,並在作業完成時向UI發送通知。通過這種方式,您可以獲得活動指標,並在您從PDF創建線程收到通知時解除它們。

+0

完美!非常感謝。 – HMMurdoc 2011-05-02 13:32:18