Я пытаюсь отобразить pdf-страницы на CGContext
, преобразовав их в изображения и затем отобразив их в виде слоя мозаики.Приложение хорошо работает на симуляторе, но вылетает на устройстве для конкретной страницы PDF.При запуске приложения на istruments оно, похоже, потребляет много памяти.
До этого на этой платформе было много вопросов по этому поводу, и они испробовали все решения, но проблема сохраняется.Пожалуйста, найдите код ниже.При вызове CGContextDrawPDFPage
CGRect pageRect = CGPDFPageGetBoxRect(page, kCGPDFMediaBox);
pdfScale = self.frame.size.width/pageRect.size.width;
originalPdfScale = 2 * pdfScale;
//pdfScale = 1.39444;
pageRect.size = CGSizeMake(pageRect.size.width*pdfScale, pageRect.size.height*pdfScale);
//---Create a low res image representation of the PDF page to display before the TiledPDFView renders its content---
UIGraphicsBeginImageContext(pageRect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
//---First fill the background with white---
CGContextSetRGBFillColor(context, 1.0,1.0,1.0,1.0);
CGContextFillRect(context,pageRect);
NSLog(@"context = %@ :::: pdfScale = %f ::::: page=%@ ", context, pdfScale, page );
CGContextSaveGState(context);
//---Flip the context so that the PDF page is rendered right side up---
CGContextTranslateCTM(context, 0.0, pageRect.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
//---Scale the context so that the PDF page is rendered at the correct size for the zoom level---
CGContextScaleCTM(context, pdfScale,pdfScale);
CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
CGContextSetRenderingIntent(context, kCGRenderingIntentDefault);
CGContextDrawPDFPage(context, page);
CGContextRestoreGState(context);
UIImage *backgroundImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
if (backgroundImageView) {
[backgroundImageView removeFromSuperview];
[backgroundImageView release];
backgroundImageView = nil;
}
backgroundImageView = [[UIImageView alloc] initWithImage:backgroundImage];
backgroundImageView.frame = pageRect;
backgroundImageView.userInteractionEnabled =YES;
backgroundImageView.contentMode = UIViewContentModeScaleAspectFit;
[self addSubview:backgroundImageView];
[self sendSubviewToBack:backgroundImageView];
// Create the TiledPDFView based on the size of the PDF page and scale it to fit the view.
if (pdfView) {
[pdfView removeFromSuperview];
[pdfView release];
pdfView = nil;
}
pdfView = [[ProM_TiledPDFView alloc] initWithFrame:pageRect andScale:pdfScale];
[pdfView setPage:page];
[self addSubview:pdfView];
[backgroundImage release];
всегда происходит сбой