我试图从我的资源包中的CGContextRef生成的pdf文档上绘制触摸(鼠标点击) . 我从Apple zoomingpdfviewer开始,我有一个UIScrollView,Pdf由 CGContextDrawPDFPage(context, pdfPage);
生成
我还在scrollView上添加了一个CATiledLayer,每次在layoutSubviews中绘制它 - 当UIScrollView被缩放时 . 我有点困惑,我应该在scrollView CGContext或TileLayers上绘制鼠标点 .
-
继续前进,我想在用户点击的pdf文档上添加一个rect / circle / point .
刚开始我是:CGContextMoveToPoint(context, 5,5); CGContextSetLineWidth(context, 12.0f); CGContextSetStrokeColorWithColor(context, [[UIColor redColor] CGColor]); CGContextAddRect(context, CGRectMake(50, 50, 20, 50)); CGContextAddLineToPoint(context, 25, 5); CGContextStrokePath(context);
将其绘制到当前上下文中 . 同样我打算在用户点击时绘制 .
但是当我缩放并重绘TitledLayer以匹配缩放内容时,这些绘制的rect / circle消失 .
如果我没有错,那么CATiledLayer将被绘制在currentContext rects / circle之上 .
最终功能非常类似于 Map 应用程序,其中添加了平铺图层,但即使在缩放 Map 后,删除的点也完全位于同一位置 .
看到很多这样的帖子后,他们很失落drawing on scrollView,pdf iOS viewer .
有谁知道如何在pdf文档上绘制geomtry(rect / points)并保持它们的位置完全相同,即使PdfView放大和缩小?我应该将PDF格式转换为图像还是其他任何方式来执行此操作?
2 回答
在CoreAnimation上搜索并尝试了一些东西之后,我想出了CALayer:如果你想在zoomable PDF viewer上添加任何内容,
1)添加UITapGestureRecognizer以处理单点触摸
2)只需在Tiled PDF视图中将新视图(圆形,矩形任何几何体)添加为图层
[self.titledPdfView.layer addSublayer:view1.layer];
您可以使用CGContext currentContext将几何视图子类化为绘制 . 当pdf放大/缩小时,这会自动重新定位图层
我试图通过在drawLayer:(CALayer *)图层inContext:(CGContextRef)上下文绘制上下文添加视图titledPdfView类,它给出了位置错误
如果要绘制可调整大小的TextView,arow,Line,也可以实现TouchesMoved,TouchesEnded方法 .
我希望这对需要在Apple的ZoomingPDFViewer上绘制自定义对象的人有所帮助 .
进一步添加(如果有人到达这里),替换Apple代码
TiledPdfView *titledPDFView = [[TiledPdfView alloc] initWithFrame:pageRect scale:pdfScale]; [titledPDFView setPage:pdfPage]; [self addSubview:titledPdfView]; [titledPDFView setNeedsDisplay]; [self bringSubviewToFront:titledPdfView]; self.titledPdfView = titledPDFView;
用:
我不知道为什么他们添加了一个类似于(类对象的成员对象)的视图限制了
-(void)drawLayer:(CALayer*)layer inContext:(CGContextRef)context
在缩放之前 . 我尝试使用setNeedsDisplay没有效果,然后替换它的工作原理 .
ESP . 如果您想在TileLayer上绘制annots并且没有任何内容出现,这很烦人 . 希望这可以帮助!!