Я пытаюсь использовать [UIPrintPageRenderer drawPageAtIndex: inRect:], чтобы преобразовать четыре webViews в pdf. Однако в iOS 8.1.1 он зависает, когда он достигает этой точки. Нет сообщений об ошибках, и код продолжает прерываться, если я попытаюсь продолжить. Кто-нибудь еще видел эту проблему и нашел способ решить эту проблему?drawPageAtIndex зависает в iOS 8.1.1
Когда я устанавливаю paperRect и printableRect на рендерере, он вызывает зависание. Если я оставлю эти строки, приложение не зависает, но полученный pdf-файл пуст.
Вот код (обновлено):
int i = 0;
UIPrintPageRenderer *renderer = [[UIPrintPageRenderer alloc] init];
for(UIWebView *webView in webViews) {
[renderer addPrintFormatter:webView.viewPrintFormatter startingAtPageAtIndex:i++];
}
CGRect paperRect = CGRectMake(0, 0, 612, 792);
CGRect printableRect = CGRectInset(paperRect, 20, 20);
[renderer setValue:[NSValue valueWithCGRect:paperRect] forKey:@"paperRect"];
[renderer setValue:[NSValue valueWithCGRect:printableRect] forKey:@"printableRect"];
NSMutableData *pdfData = [NSMutableData data];
// Render the html into a PDF
UIGraphicsBeginPDFContextToData(pdfData, CGRectZero, nil);
for (NSInteger i=0; i < [renderer numberOfPages]; i++)
{
UIGraphicsBeginPDFPage();
CGRect bounds = UIGraphicsGetPDFContextBounds();
[renderer drawPageAtIndex:i inRect:bounds]; <-- Hangs here
}
UIGraphicsEndPDFContext();
Ого, да, это так ... Вы пытаетесь выполнить довольно интенсивную функцию на основном потоке в узкой петле. Вместо этого попробуйте использовать NSOperationQueue. –
Я обновил код выше. Вышеприведенный код отлично работает в iOS 7.1. В iOS 8.1 код зависает. Если я удалю вызовы для установки paperRect и printableRect на рендерере, код не будет висеть в iOS 8.1, но полученный pdf-файл будет пустым. – DCG