2016-09-14 93 views
0

我正在使用pdf显示地图的应用程序。在那里,我有基本地图pdf (pdf1),其中我需要显示另一个pdf (pdf2)层是有城市名称。在缩放ios上添加内容到pdf的正确方法

我能够通过添加另一个CATiledLayer对象如下面的图可以这样做:

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]; 

但在这里,我面临两个问题:

  1. 如果PDF1未完全加载,我在其上添加另一个pdf2,然后pdf1将永远不会被完全加载。它会模糊。

  2. 如果pdf1完全加载,那么在添加pdf2和缩放3,4次后缩放时,pdf1会变得模糊。

Map with pdf1 Map with pdf2 added on pdf1

请帮助!

回答

0

我已经有了解决方案,用于在缩放时向pdf添加更多内容。根据我的理解,我做错了什么是我添加另一个CATiledLayer (tiledLayer)对象在相同的视图和视图正在考虑这个对象作为当前的瓷砖和视图正在处理这个瓷砖(tiledLayer)。这就是为什么前一个瓷砖的褪色视图不清晰的原因。

现在我正在使用相同的瓷砖在它上面添加更多细节。我用另一个CGPDFPageRef对象(_PDFPageRef2)

CGPDFDocumentRef myDocumentRef = CGPDFDocumentCreateWithURL((CFURLRef) pdfURL); 

_PDFPageRef2 = CGPDFDocumentGetPage(myDocumentRef, 1); 

在此之后,我再次呼吁观点

[self setNeedsDisplay]; 

此方法绘制的观点方法setNeedsDisplay,因此呼吁-drawRect:该方法的实现如下:

- (void)drawRect:(CGRect)rect { CGContextRef context = 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) 

}

因此,我能够更详细信息添加到PDF的缩放。

enter image description here