locationInView在iOS网络视图中返回无效坐标



Am正在尝试将签名集成到pdf文件中,该文件显示在UIWebview中。我可以通过固定的位置将签名集成到pdf文件中,比如(50,50)。现在尝试将其集成到用户的单次敲击位置。首先尝试通过代码获取用户的单个敲击位置,

CGPoint tapLocation = [gesture locationInView: self.view];
NSLog(@"tapped location is %@ n",NSStringFromCGPoint(tapLocation));
NSInteger x,y;
x=tapLocation.x;
y=tapLocation.y;
CGRect imageRect = CGRectMake(x,y, image.size.width, image.size.height);

我可以获取坐标,但签名没有放在我点击pdf文件的位置,然后发现,坐标返回的位置不正确。例如,如果我在位置(50,50)敲击它的返回(68386),则签名在位置(68386。

有人能帮我解决这个问题吗?

您只需要确保在[gesture locationInView: self.view];

仅此而已,如果您不确定应该选择什么视图,请尝试更改为代码中的其他子视图。

我可以给你一个猜测,但我需要先看看你的代码。

如果您需要任何帮助,只需询问(Y)

您无法使用UIWebView实现此功能,因为您需要一些不可用的信息
抽头位置在视图坐标中给出。为了将此点转换为PDF页面坐标,您需要了解以下内容:

  1. 页面在web视图中的显示位置(您不知道)
  2. 用于显示页面的缩放因子(您不知道)
  3. PDF页面的cropBox/mediaBox(除非重新加载CGPDF文档中的第页)

为了将视图坐标正确转换为页面坐标,需要所有上述信息
下面的代码显示了如何将视点转换为PDF点。

- (CGPoint)convertViewPointToPDFPoint:(CGPoint)viewPoint 
{
    CGPoint pdfPoint = CGPointMake(0, 0);
    CGRect cropBox = CGPDFPageGetBoxRect(pdfPage, kCGPDFCropBox);
    int rotation = CGPDFPageGetRotationAngle(pdfPage);
    switch (rotation) {
        case 90:
        case -270:
            pdfPoint.x = cropBox.size.width * (viewPoint.y - pageRenderRect.origin.y) / pageRenderRect.size.height;
            pdfPoint.y = cropBox.size.height * (viewPoint.x - pageRenderRect.origin.x) / pageRenderRect.size.width;
            break;
        case 180:
        case -180:
            pdfPoint.x = cropBox.size.width * (pageRenderRect.size.width - (viewPoint.x - pageRenderRect.origin.x)) / pageRenderRect.size.width;
            pdfPoint.y = cropBox.size.height * (viewPoint.y - pageRenderRect.origin.y) / pageRenderRect.size.height;
            break;
        case -90:
        case 270:
            pdfPoint.x = cropBox.size.width * (pageRenderRect.size.height - (viewPoint.y - pageRenderRect.origin.y)) / pageRenderRect.size.height;
            pdfPoint.y = cropBox.size.height * (pageRenderRect.size.width - (viewPoint.x - pageRenderRect.origin.x)) / pageRenderRect.size.width;
            break;
        case 0:
        default:
            pdfPoint.x = cropBox.size.width * (viewPoint.x - pageRenderRect.origin.x) / pageRenderRect.size.width;
            pdfPoint.y = cropBox.size.height * (pageRenderRect.size.height - (viewPoint.y - pageRenderRect.origin.y)) / pageRenderRect.size.height;
            break;
    }
    pdfPoint.x = pdfPoint.x + cropBox.origin.x;
    pdfPoint.y = pdfPoint.y+ cropBox.origin.y;
    return pdfPoint;
}
  • viewPoint是您的切入点
  • cropBox是页面裁剪框(#3)
  • pageRenderRef是#1&2组合(缩放后的PDF页面在视图坐标中的位置和大小)
  • pdfPoint是页面上您绘制签名的点

上面的代码取自我的博客

上的一篇文章

最新更新