使用 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 的实际坐标的主要内容,如果未能解决你的问题,请参考以下文章