2011-05-02 2 views
2

저는 UIGraphicsBeginPDFContextToData를 사용하여 여러 페이지로 PDF 파일을 만듭니다. 모든 것이 잘 작동합니다 ... 내 문제는 App이 짧은 시간 동안 정지하고 UI에 대한 제어권이없는 1 PDF에 대해 더 많은 양의 페이지를 만들 때입니다. PDF 파일이 올바르게 작성되었지만 로딩 화면이나 그와 비슷한 것을 표시하려고합니다. UIActivityIndicator 내의 UIAlertView 또는 툴바의 UIActivityIndicator와 같이 테스트 한 모든 것이 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

Perfect! 고마워. – HMMurdoc

관련 문제