2011-05-02 13 views
2

私はUIGraphicsBeginPDFContextToDataを使用して複数のページでPDFファイルを作成しています。すべてがうまくいっています...私の問題は、アプリケーションが1ページ分のPDFを大量に作成すると、短時間でフリーズし、UIを制御できないということです。 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

関連する問題