Я реализовал просмотрщик PDF в моем приложении. Это вид прокрутки, который использует CATiledLayer
для увеличения.
Более простой подход состоял бы в использовании QLPreviewController
, который поддерживает просмотр PDF с контролем страниц и масштабированием, но мне нужен точный контроль над страницей PDF.
У меня работает зритель, но я бы хотел, чтобы перерисовка появилась раньше. В настоящее время он только перерисовывает текст, когда я увеличиваю изображение, чтобы удвоить размер (200%). Таким образом, текст выглядит размытым, пока вы не увеличите масштаб достаточно.
Я пробовал различные комбинации levelOfDetail
и levelOfDetailBias
, чтобы попытаться провести перерисовку раньше, но безрезультатно.
Вот код, который создает 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];
Пожалуйста, укажите мне правильное направление.