2011-07-11 16 views
0

编辑:在绘制PDF页面时,似乎原点的组件已经乘以2。我正在做这件事吗?CGContextDrawPDFPage正在绘制错误原点的页面

我有一个UIViewController在UIScrollView上显示PDF页面。 PDF页面本身绘制在CATiledLayer上,但是,当我的视图控制器绘制图层时,图层边界与绘制的PDF之间存在相当大的偏移。正如你可以在图片中看到,该页面应该已经画上黄色的观点:

The PDF is drawn with a considerable offset from it's desired origin

下面是相关的代码,绘制页:

- (void)refreshPage 
{ 

    if(contentView) { 
     for(UIView *v in self.view.subviews) { 
      [v removeFromSuperview]; 
      [v release]; 
     } 
    } 

    CGRect pageRect = CGRectIntegral(CGPDFPageGetBoxRect(self._document.page, kCGPDFCropBox)); 

    pageRect.origin.x = ((self.view.frame.size.width/2) - (pageRect.size.width/2)); 

    CATiledLayer *tiledLayer = [CATiledLayer layer]; 
    tiledLayer.delegate = self; 
    tiledLayer.tileSize = CGSizeMake(1024.0, 1024.0); 
    tiledLayer.levelsOfDetail = 1000; 
    tiledLayer.levelsOfDetailBias = 1000; 
    tiledLayer.frame = pageRect; 

    contentView = [[UIView alloc] initWithFrame:pageRect]; 
    [contentView.layer addSublayer:tiledLayer]; 

    CGRect viewFrame = self.view.frame; 
    viewFrame.origin = CGPointZero; 

    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:viewFrame]; 

    //[scrollView setBackgroundColor:[UIColor cyanColor]]; 
    //[contentView setBackgroundColor:[UIColor yellowColor]]; 

    scrollView.delegate = self; 
    scrollView.contentSize = pageRect.size; 
    scrollView.maximumZoomScale = 1000; 
    [scrollView addSubview:contentView]; 

    [self.view addSubview:scrollView]; 

    pagingViewController = [[PDFPagingViewController alloc] initWithDocument:self._document AndObserver:self]; 
    [self.view addSubview:pagingViewController.view]; 
} 

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{ 
    return contentView; 
} 

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx 
{ 
    if(self._document) { 
     [layer setBackgroundColor:(CGColorRef)[UIColor redColor]]; 

     CGRect drawingRect = CGContextGetClipBoundingBox(ctx); 

     CGContextSetRGBFillColor(ctx, 1.0, 1.0, 1.0, 1.0); 
     CGContextFillRect(ctx, drawingRect); 
     CGContextTranslateCTM(ctx, 0.0, layer.bounds.size.height); 
     CGContextScaleCTM(ctx, 1.0, -1.0); 
     CGContextConcatCTM(ctx, CGPDFPageGetDrawingTransform(self._document.page, kCGPDFCropBox, layer.bounds, 0, true)); 
     CGContextDrawPDFPage(ctx, self._document.page); 
    } 
} 

回答

2

您需要更改时你设置了pageRect的原点(我假设你在视图中居中)。如果您真的打算只偏移一个,您将设置图层框架和contentView框架的偏移量为pageRect

-(void)refreshPage { 
//... 

CGRect pageRect = CGRectIntegral(CGPDFPageGetBoxRect(self._document.page, kCGPDFCropBox)); 

CATiledLayer *tiledLayer = [CATiledLayer layer]; 
//... 
tiledLayer.frame = pageRect; 

// set the pageRect origin now to center the contentView, not the layer 
pageRect.origin.x = ((self.view.frame.size.width/2) - (pageRect.size.width/2)); 

contentView = [[UIView alloc] initWithFrame:pageRect]; 
[contentView.layer addSublayer:tiledLayer]; 

//... 
} 
+0

除了像你说的我也不得不立即改变pageRect的原点固定代码{0,0}由于某种原因有那些已经预定抵消一些PDF文件。 – Raphael