首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用QuartzCore在可缩放的CGPDF文档上绘制几何图形(圆形或矩形)

使用QuartzCore在可缩放的CGPDF文档上绘制几何图形(圆形或矩形)
EN

Stack Overflow用户
提问于 2013-12-07 01:56:52
回答 2查看 326关注 0票数 0

我正在尝试在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 scrollViewpdf iOS viewer这样的帖子后,我相当迷失。

*有人知道如何在pdf文档上绘制几何图形(直角/点),并且即使PdfView放大和缩小也能保持它们的位置完全相同吗?我应该将pdf转换成图像还是其他方式?

EN

回答 2

Stack Overflow用户

发布于 2013-12-17 19:36:00

在搜索和尝试了一些在CoreAnimation上的东西后,CALayer我想:如果你想在zoomable PDF viewer上添加任何东西,

1)添加处理单点触摸的UITapGestureRecognizer

代码语言:javascript
复制
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 taps

2)只需在平铺的PDF视图上添加新视图(圆形、矩形任何几何图形)作为图层

self.titledPdfView.layer addSublayer:view1.layer;

在其中,您可以将几何视图细分为要使用CGContext currentContext绘制的子类。这会在放大/缩小pdf时自动重新定位图层

我试图通过在drawLayer:(CALayer*)layer inContext:(CGContextRef) titledPdfView类的上下文中绘制上下文来添加视图,这会导致位置错误

如果你想绘制一个可调整大小的TextView,arow,Line,你也可以实现一个TouchesMoved,TouchesEnded方法。

我希望这对那些需要在苹果的ZoomingPDFViewer上绘制定制对象的人有所帮助。

票数 0
EN

Stack Overflow用户

发布于 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;

具有以下特点:

代码语言:javascript
复制
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上绘制注解,但是什么也没有出现,这是很烦人的。希望这能有所帮助!!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20430471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档