WKWebView (бета) метод takeSnapshot, как реализовать?

Я заметил WKWebView Документация теперь перечисляет метод с именем takeSnapshot это поддерживается iOS 11 и macOS 10.13 и выше (бета-версия Xcode 9).

Кто-нибудь уже поиграл или реализовал? Я пытаюсь заставить его работать на детской площадке, но я не знаю, с чего начать? Это метод на 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?

1 ответ

Решение

Насколько я тестировал, метод takeSnapshot(with:completionHandler:) фактически существует как метод экземпляра и работает как ожидалось.

Просто это немного сложно использовать.

Метод объявляет свой первый параметр как WKSnapshotConfiguration?, но класс WKSnapshotConfiguration не импортируется с import WebKit, Вы можете пройти nil к параметру, но для использования метода необходимо импортировать тип WKSnapshotConfiguration, И я не мог найти зависимые субмодули для импорта WKSnapshotConfiguration,

Итак, если вы хотите поиграть с этой новой функцией, вам нужно создать проект приложения с bridging-header. (Если вы знаете, как использовать bridging-header на игровой площадке, вы можете протестировать эту функцию в нем. Но я не знаю, можете ли вы или как.)

{} Имя_проекта -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.

Другие вопросы по тегам