我正在尝试在CGContextRef从我的资源包中生成的pdf文档上绘制触摸(鼠标点击)。我从苹果zoomingpdfviewer开始,在那里我有一台UIScrollView,它是由CGContextDrawPDFPage(context, pdfPage);生成的
我还在scrollView上添加了一个CATiledLayer,每次当UIScrollView缩放时,它都会在layoutSubviews中绘制。我有点困惑,我应该在scrollView CGContext或TileLayers上绘制鼠标指针。
-->下一步,我想在用户点击的pdf文档上添加一个矩形/圆/点。
首先,我是:
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以匹配缩放内容时,这些绘制的矩形/圆将消失。
如果我没记错,那么在currentContext矩形/圆的上方绘制CATiledLayer。
最终功能与地图应用程序非常相似,在地图应用程序中添加了瓦片层,但即使在地图缩放后,放置的点也完全位于相同的位置。
在看到许多像drawing on scrollView,pdf iOS viewer这样的帖子后,我相当迷失。
*有人知道如何在pdf文档上绘制几何图形(直角/点),并且即使PdfView放大和缩小也能保持它们的位置完全相同吗?我应该将pdf转换成图像还是其他方式?
发布于 2013-12-17 19:36:00
在搜索和尝试了一些在CoreAnimation上的东西后,CALayer我想:如果你想在zoomable PDF viewer上添加任何东西,
1)添加处理单点触摸的UITapGestureRecognizer
UITapGestureRecognizer *singleTapGestureRecognizer=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTapOnScrollView:)];
singleTapGestureRecognizer.numberOfTapsRequired=1;
singleTapGestureRecognizer.delegate=self;
[self addGestureRecognizer:singleTapGestureRecognizer];
[singleTapGestureRecognizer requireGestureRecognizerToFail:doubleTapGestureRecognizer]; // added if you have a UITapGestureRecognizer for double taps2)只需在平铺的PDF视图上添加新视图(圆形、矩形任何几何图形)作为图层
self.titledPdfView.layer addSublayer:view1.layer;
在其中,您可以将几何视图细分为要使用CGContext currentContext绘制的子类。这会在放大/缩小pdf时自动重新定位图层
我试图通过在drawLayer:(CALayer*)layer inContext:(CGContextRef) titledPdfView类的上下文中绘制上下文来添加视图,这会导致位置错误
如果你想绘制一个可调整大小的TextView,arow,Line,你也可以实现一个TouchesMoved,TouchesEnded方法。
我希望这对那些需要在苹果的ZoomingPDFViewer上绘制定制对象的人有所帮助。
发布于 2013-12-26 20:04:34
进一步添加(如果有人到达这里),替换Apple代码
TiledPdfView *titledPDFView = [[TiledPdfView alloc] initWithFrame:pageRect scale:pdfScale]; [titledPDFView setPage:pdfPage]; [self addSubview:titledPdfView]; [titledPDFView setNeedsDisplay]; [self bringSubviewToFront:titledPdfView]; self.titledPdfView = titledPDFView;
具有以下特点:
titledPdfView = [[TiledPdfView alloc] initWithFrame:pageRect scale:pdfScale];
[titledPdfView setPage:pdfPage];
[self addSubview:titledPdfView];
[self bringSubviewToFront:titledPdfView];我不知道他们为什么要添加这样的视图(成员对象到类对象)来限制
-(void)drawLayer:(CALayer*)layer inContext:(CGContextRef)context
在缩放之前。我已经尝试了setNeedsDisplay,但没有效果,然后替换了n,它起作用了。
Esp.如果你想在你的TileLayer上绘制注解,但是什么也没有出现,这是很烦人的。希望这能有所帮助!!
https://stackoverflow.com/questions/20430471
复制相似问题