locationInView在iOS webview中返回无效坐标

时间:2013-11-19 06:49:08

标签: ios objective-c pdf uiwebview integration

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

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)它返回(68,386),那么签名被整合到位置(68,386)。

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

2 个答案:

答案 0 :(得分:0)

您只需要确保使用正确的视图 [gesture locationInView: self.view];

多数,如果您不确定应该选择哪种视图,请尝试更改代码中的其他子视图。

我可以猜你,但我需要先看看你的代码。

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

答案 1 :(得分:0)

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

  1. 在网页视图中显示页面(您不知道这一点)
  2. 用于显示页面的缩放系数(您不知道这一点)
  3. PDF页面的cropBox / mediaBox(除非你重新加载,否则你不知道这个         页面再次在CGPDFDocument中)
  4. 为了将视图坐标正确转换为页面坐标,需要以上所有信息 下面的代码显示了如何将视点转换为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)
    • pageRenderRect是#1& #2组合(视图坐标中缩放的PDF页面的位置和大小)
    • pdfPoint是您绘制签名的页面上的点

    上面的代码取自article on my blog