使用 Swift 3 触摸时在 Webview 中获取 pdf 的实际坐标

Posted

技术标签:

【中文标题】使用 Swift 3 触摸时在 Webview 中获取 pdf 的实际坐标【英文标题】:Get actual coordinate of pdf in Webview when touch with Swift 3 【发布时间】:2017-07-13 06:18:40 【问题描述】:

我已成功将 pdf 文件从 URL 加载到 Web 视图。我想在触摸 webview 后获取坐标,将其数据发送到服务器,以便在服务器端的该位置添加一些文本。问题是如何在 webview 缩放或滚动到第 2,3 页时获得该坐标。 你能帮我解决 Swift 3 中的问题吗

这里是代码

class ViewController: UIViewController, UITextFieldDelegate, UIGestureRecognizerDelegate, UIWebViewDelegate 

    @IBOutlet var imageView: UIImageView!
    @IBOutlet var webView: UIWebView!

    override func viewDidLoad() 
        super.viewDidLoad()

        let url = URL(string: "http://www.pdf995.com/samples/pdf.pdf")!
        webView.loadRequest(URLRequest(url: url))

        let webViewTapped = UITapGestureRecognizer(target: self, action: #selector(self.tapAction(_:)))
        webViewTapped.numberOfTouchesRequired = 1
        webViewTapped.delegate = self
        webView.addGestureRecognizer(webViewTapped)
    

    func tapAction(_ sender: UITapGestureRecognizer) 
        // This always return the same coordinates in zoom or not zoom
        let point = sender.location(in: webView)
        print("======")
        print("x: \(point.x) y: \(point.y)")
    

PS:我是swift的新手

【问题讨论】:

【参考方案1】:

用户3783161,

首先,如果您不使用 UIGestureRecognizerDelegate 中的任何方法,则可以删除以下行。 webViewTapped.delegate = self

要获取触摸 UIWebView 时的实际坐标,您需要获取 UIScrollView 上的位置,而不是从 UIWebView 获取位置。

func tapAction(_ sender: UITapGestureRecognizer) 
    // This always return the same coordinates in zoom or not zoom
    // let point = sender.location(in: webView)
    // print("======WebView")
    // print("x: \(point.x) y: \(point.y)")

    // Get location frown webView.ScrollView
    let point = sender.location(in: webView.scrollView)
    print("======ScrollView")
    print("x: \(point.x) y: \(point.y)")

但是你仍然有一个问题,因为位置是相对于 UIWebView 的内容大小而不是 PDF 文档。 我没有找到答案,但是您可以在以下之间进行简单的转换:

PDF Paper Size vs. WebView Size

由于PDF必须有这个信息(pdf可以是A4 / A3 / A5 / C1 / etc)。

【讨论】:

以上是关于使用 Swift 3 触摸时在 Webview 中获取 pdf 的实际坐标的主要内容,如果未能解决你的问题,请参考以下文章

允许在 WebView 中的长按触摸事件上选择文本

Swift:没有互联网连接时如何在 webview 中显示错误消息? [复制]

在视图中加载 url 时在 webview 中显示错误

如何在UITableView - Swift中制作清单?

使用多个视图/布局时在 Android 中处理触摸事件

SWIFT 无法使用第二个按钮在 UIWebView 中打开第二个 URL