2017-08-09 51 views
2

我注意到WKWebView文檔現在列出了一個名爲takeSnapshot的方法,它受iOS 11和macOS 10.13及更高版本(Xcode 9 beta)支持。WKWebView的(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? 
+0

同意OOPer,這絕對是一個bug:http://www.openradar.me/radar?id=5066137213599744 – JAL

回答

5

據我測試,方法takeSnapshot(with:completionHandler:)實際存在的實例方法和按預期工作。

只是這有點難以使用它。

該方法聲明其第一個參數爲WKSnapshotConfiguration?,但類WKSnapshotConfiguration未導入import WebKit。您可以將nil傳遞給參數,但要使用該方法,則需要導入類型WKSnapshotConfiguration。我找不到任何從屬子模塊導入WKSnapshotConfiguration

所以,如果你想玩這個新功能,你需要創建一個帶有橋接頭的應用程序項目。 (。如果你知道如何在操場上用橋接頭,您可以在它測試此功能,但我不知道你是否可以或如何)

{}項目名-Bridging-Header.h:

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

而且ViewController.swift的例子:(放置一個WKWebView,一個UIImageView並在視圖中UIButton

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 ?? "--")") 
      } 
     } 
    } 

} 


此外,這似乎是一個WebKit框架的錯誤,您最好發送一個bug report給Apple。

+0

這是比我的更好的答案。很好用''查找,儘管編譯器抱怨缺少WebKit子模塊。你也可能想刪除'WKSnapshotConfiguration()',因爲它沒有公共初始值設定項。 – JAL

+0

@JAL,謝謝。 'WKSnapshotConfiguration()'是我正在測試的東西的廢墟,忘記刪除它。由於這似乎是一個錯誤,爲了測試該功能,我們可能需要忽略一些警告。 – OOPer

+0

隨意欺騙我的雷達:http://www.openradar.me/radar?id=5066137213599744 – JAL