我注意到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 ?? "--")")
}
}
}
}
(在视图上放置WKWebView
、UIImageView
和UIButton
。
还有一个,这似乎是WebKit框架的错误,你最好向Apple发送一个错误报告。