Ich habe eine PDF-Datei, die ich in Umrissform zeichnen möchte. Ich möchte die ersten paar Seiten des Dokuments jeweils in ihrer eigenen UIImage zeichnen, um sie auf einer Schaltfläche zu verwenden, so dass beim Anklicken die Hauptanzeige zur angeklickten Seite navigiert.CGContextDrawPDFPage nimmt große Mengen an Speicher auf
CGContextDrawPDFPage scheint jedoch beim Versuch, die Seite zu zeichnen, reichlich Speicher zu belegen. Obwohl das Bild nur etwa 100 Pixel groß sein soll, stürzt die Anwendung beim Zeichnen einer Seite ab, was laut Instruments etwa 13 MB Speicher nur für die eine Seite zuweist.
Hier ist der Code für das Zeichnen:
//Note: This is always called in a background thread, but the autorelease pool is setup elsewhere
+ (void) drawPage:(CGPDFPageRef)m_page inRect:(CGRect)rect inContext:(CGContextRef) g {
CGPDFBox box = kCGPDFMediaBox;
CGAffineTransform t = CGPDFPageGetDrawingTransform(m_page, box, rect, 0,YES);
CGRect pageRect = CGPDFPageGetBoxRect(m_page, box);
//Start the drawing
CGContextSaveGState(g);
//Clip to our bounding box
CGContextClipToRect(g, pageRect);
//Now we have to flip the origin to top-left instead of bottom left
//First: flip y-axix
CGContextScaleCTM(g, 1, -1);
//Second: move origin
CGContextTranslateCTM(g, 0, -rect.size.height);
//Now apply the transform to draw the page within the rect
CGContextConcatCTM(g, t);
//Finally, draw the page
//The important bit. Commenting out the following line "fixes" the crashing issue.
CGContextDrawPDFPage(g, m_page);
CGContextRestoreGState(g);
}
Gibt es einen besseren Weg, um dieses Bild zu zeichnen, die nicht riesige Mengen an Speicher in Anspruch nehmen?
Wie sind Sie nach der Fertigstellung dieses Threads zum Aktualisieren der Ansicht gegangen? –