2016-09-14 3 views
0

Ich arbeite in einer App, die Karte in pdf anzeigt. Darin habe ich die Grundkarte pdf (pdf1) oben auf das ich eine andere pdf (PDF2) Schicht zu zeigen, muß die Städte Namen hat.Korrektes Hinzufügen von Inhalten zu pdf beim Zoomen ios

Ich bin in der Lage, dies zu tun, indem sie wie unten auf der Ansicht eines weiteren CATiledLayer Objekt hinzufügen:

NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"pdf"]; 
NSURL *pdfURL = [NSURL fileURLWithPath:filePath]; 
CGPDFDocumentRef myDocumentRef = CGPDFDocumentCreateWithURL((CFURLRef) pdfURL); 
_PDFPageRef = CGPDFDocumentGetPage(myDocumentRef, 1); 


CATiledLayer *tiledLayer = [CATiledLayer layer]; 
tiledLayer.delegate = self; 
tiledLayer.levelsOfDetail = 3; // Zoom levels 

tiledLayer.levelsOfDetailBias = 3; // Bias 
tiledLayer.backgroundColor = [UIColor clearColor].CGColor; 
UIScreen *mainScreen = [UIScreen mainScreen]; // Main screen 

CGFloat screenScale = [mainScreen scale]; // Main screen scale 

CGRect screenBounds = [mainScreen bounds]; // Main screen bounds 

CGFloat w_pixels = (screenBounds.size.width * screenScale); 

CGFloat h_pixels = (screenBounds.size.height * screenScale); 

CGFloat max = ((w_pixels < h_pixels) ? h_pixels : w_pixels); 

CGFloat sizeOfTiles = ((max < 512.0f) ? 512.0f : 1024.0f); 

tiledLayer.tileSize = CGSizeMake(sizeOfTiles, sizeOfTiles); 
tiledLayer.frame = CGRectIntegral(CGPDFPageGetBoxRect(_PDFPageRef, kCGPDFCropBox)); 
[[self layer] addSublayer:tiledLayer]; 
[self setNeedsDisplay]; 

Aber ich bin vor zwei Probleme:

  1. Wenn pdf1 nicht vollständig geladen ist, und Ich füge ein weiteres pdf2 darüber hinzu, dann wird pdf1 nie vollständig geladen werden. Es wird verschwommen sein.

  2. Wenn pdf1 vollständig geladen ist, dann PDF2 auf das Hinzufügen und das Zoomen nach 3,4-mal Zoomens wird pdf1 blurr.

Map with pdf1 Map with pdf2 added on pdf1

Bitte helfen !!

Antwort

0

Ich habe die Lösung für das Hinzufügen weiterer Inhalte zu pdf beim Zoomen. Nach meinem Verständnis, was ich falsch gemacht habe war, dass ich ein weiteres CATiledLayer (tiledLayer) Objekt auf der gleichen Ansicht hinzugefügt und die Ansicht betrachtete dieses Objekt als die aktuelle Kachel und Ansicht funktionierte auf dieser Kachel (tiledLayer). Deshalb wurde die verblasste Ansicht der vorherigen Kachel nicht klar.

Jetzt verwende ich die gleiche Kachel für weitere Details darüber. Ich habe ein anderes CGPDFPageRef Objekt (_PDFPageRef2)

CGPDFDocumentRef myDocumentRef = CGPDFDocumentCreateWithURL((CFURLRef) pdfURL); 

_PDFPageRef2 = CGPDFDocumentGetPage(myDocumentRef, 1); 

Danach I setNeedsDisplay Methode auf der Ansicht

[self setNeedsDisplay]; 

Diese Methode der Ansicht, nenne wieder Unentschieden und rufen so -drawRect: Verfahren der Ansicht, deren implemntation ist wie folgt:

- (void) drawRect: (CGRect) rect { CGContextRef Kontext = UIGraphicsGetCurrentContext();

float dpi = 100.0/72.0; 

ReaderContentPage *readerContentPage = self; // Retain self 

// CGContextSetRGBFillColor(context, 1.0f, 1.0f, 1.0f, 1.0f); // White 
CGContextSetFillColorWithColor(context, [UIColor clearColor].CGColor); 
CGContextFillRect(context, CGContextGetClipBoundingBox(context)); // Fill 

//NSLog(@"%s %@", __FUNCTION__, NSStringFromCGRect(CGContextGetClipBoundingBox(context))); 

CGContextTranslateCTM(context, 0.0f, self.bounds.size.height); CGContextScaleCTM(context, 1.0f, -1.0f); 


CGContextConcatCTM(context, CGPDFPageGetDrawingTransform(_PDFPageRef, kCGPDFCropBox, self.bounds, 0, true)); 

//CGContextSetRenderingIntent(context, kCGRenderingIntentDefault); CGContextSetInterpolationQuality(context, kCGInterpolationDefault); 

CGContextDrawPDFPage(context, _PDFPageRef); // Render the PDF1 page into the context 
if (_PDFPageRef2) { 
    CGContextConcatCTM(context, CGPDFPageGetDrawingTransform(_PDFPageRef2, kCGPDFCropBox, self.bounds, 0, true)); 

    //CGContextSetRenderingIntent(context, kCGRenderingIntentDefault); CGContextSetInterpolationQuality(context, kCGInterpolationDefault); 

    CGContextDrawPDFPage(context, _PDFPageRef2); // Render the PDF2 page into the context 

} 
if (readerContentPage != nil) readerContentPage = nil; // Release self 
                 // UIGraphicsPushContext(context); 
                 // CGSize size = CGSizeMake(320, 480); //Screen Size on iPhone device 
                 // UIGraphicsBeginImageContext(size); //Create a new Bitmap-based graphics context (also makes this the current context) 

}

So ich bin in der Lage zu zoomen mehr Details zu pdf hinzuzufügen.

enter image description here

Verwandte Themen