WKWebView的(beta)takeSnapshot方法,如何实现?



我注意到WKWebView文档现在列出了iOS 11和macOS 10.13及更高版本(Xcode 9 beta(支持的名为takeSnapshot的方法。

有没有人玩过或实施过? 我试图让它在游乐场工作,但我不知道从哪里开始? 这是WKWebView上的方法吗?

我的代码:

import UIKit
import PlaygroundSupport
import WebKit

let frame = CGRect(x: 0, y: 0, width: 800, height:600)
let web = WKWebView(frame: frame)
let rq = URLRequest(url: NSURL(string: "http://apple.com")! as URL)
web.load(rq)
PlaygroundPage.current.liveView = web
PlaygroundPage.current.needsIndefiniteExecution = true
//Take snapshot?

据我测试,该方法实际上takeSnapshot(with:completionHandler:)作为实例方法存在,并按预期工作。

只是使用它有点困难。

该方法将其第一个参数声明为WKSnapshotConfiguration?,但类WKSnapshotConfiguration不会随import WebKit一起导入。您可以将nil传递给参数,但要使用该方法,您需要导入类型WKSnapshotConfiguration。而且我找不到任何依赖的子模块来导入WKSnapshotConfiguration.

因此,如果您想使用此新功能,则需要创建一个带有桥接标头的应用程序项目。 (如果你知道如何在操场中使用桥接头,你可以在其中测试这个功能。但我不知道你是否可以或如何。

{ProjectName}-Bridging-Header.h:

@import CoreGraphics;
#import <WebKit/WKSnapshotConfiguration.h>

还有一个ViewController的例子.swift:

import UIKit
import WebKit
class ViewController: UIViewController {
@IBOutlet weak var webView: WKWebView!
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
let request = URLRequest(url: URL(string: "http://apple.com")!)
webView.load(request)
}
@IBAction func buttonPressed(_ sender: UIButton) {
webView.takeSnapshot(with: nil) {image, error in
if let image = image {
self.imageView.image = image
print("Got snapshot")
} else {
print("Failed taking snapshot: (error?.localizedDescription ?? "--")")
}
}
}
}

(在视图上放置WKWebViewUIImageViewUIButton


还有一个,这似乎是WebKit框架的错误,你最好向Apple发送一个错误报告。

相关内容

  • 没有找到相关文章

最新更新