使用CATiledLayer渲染PDF时,如何在缩放时保持文本清晰

时间:2011-03-22 22:51:45

标签: iphone ios ipad quartz-graphics

我在我的应用中实现了PDF查看器。这是一个使用CATiledLayer进行缩放的滚动视图。

更简单的方法是使用QLPreviewController,它支持使用页面控制和缩放进行PDF查看,但我需要对PDF页面进行精细控制。

我让观众工作,但希望重绘能够尽快开始。目前,当我放大倍数(200%)时,它只重绘文本。所以文字看起来很模糊,直到你放大到足够远。

我尝试了levelOfDetaillevelOfDetailBias的各种组合,以便尽快重新绘制,但无济于事。

以下是创建CATiledLayers

的代码
  //get the pdf crop box rectangle
  CGPDFPageRef pageRef=[self.pdf getPdfPage:self.myPageNo];
  CGRect cropBox = CGRectIntegral(CGPDFPageGetBoxRect(pageRef, kCGPDFCropBox));

  //scale to size of the screen
  CGRect targetRect = self.view.bounds;
  CGFloat xScale = targetRect.size.width / cropBox.size.width;
  CGFloat yScale = targetRect.size.height / cropBox.size.height;
  self.scale = xScale < yScale ? xScale : yScale;

  //alway fill height of screen
  self.scale = yScale;

  //used to center the pdf horizontally
  self.xOffSet = (targetRect.size.width - cropBox.size.width*self.scale)/2;
  [self renderPDFPageToImage];
  CGRect boundsRect = self.view.bounds;

  //use a tiled layer for better performance
  CATiledLayer *tiledLayer = [CATiledLayer layer];
  tiledLayer.delegate = self;
  tiledLayer.tileSize = CGSizeMake(1024.0, 1024.0);
  tiledLayer.levelsOfDetail = 4;
  tiledLayer.levelsOfDetailBias = 4;
  tiledLayer.frame = boundsRect;

  self.myContentView = [[[UIView alloc] initWithFrame:boundsRect] autorelease];
  [self.myContentView.layer addSublayer:tiledLayer];

  CGRect viewFrame = self.view.frame;
  viewFrame.origin = CGPointZero;
  UIScrollView *_scrollView = [[UIScrollView alloc] initWithFrame:viewFrame];
  _scrollView.delegate = self;
  _scrollView.contentSize = boundsRect.size;

  _scrollView.maximumZoomScale = 4;
  [_scrollView addSubview:myContentView];
  //retain it
  self.scrollView=_scrollView;

  [self.view addSubview:_scrollView];
  [_scrollView release];

请指出正确的方向。

0 个答案:

没有答案