как позволить пользователю выбрать изображение на веб-сайте - PullRequest
0 голосов
/ 08 мая 2020

В качестве одной из опций в моем приложении я хочу разрешить пользователю переходить на images.google.com и выбирать изображение для использования в приложении.

Я установил SFSafariViewController, но Понятия не имею, как таким образом получить изображение. Может быть, я должен / мог бы ответить на команду копирования? Если да, то как? Какие классы мне нужно реализовать?

{ (...)
            let url = URL(string: "https://images.google.com")!
            let safariViewController = SFSafariViewController(url: url)
            safariViewController.delegate = self
            self.presentationController?.present(safariViewController, animated: true)
}

//MARK: - Ext. Delegate SFSafariViewControllerDelegate
extension ProjectImagePicker: SFSafariViewControllerDelegate {
    public func safariViewControllerDidFinish(_ controller: SFSafariViewController) {
        print("SAFARI DELEGATE HIT!")
        guard let image = controller.copy() as? UIImage else { return }
        self.delegate?.didSelect(image: image)
        controller.dismiss(animated: true, completion: nil)
    }
}

Можно ли это сделать с помощью WKWebView, если да, то как?

Приветствуется любое движение в правильном направлении!

1 Ответ

0 голосов
/ 11 мая 2020

Я решил это так:

Я представляю Safari ViewController. Когда пользователь долго нажимает на изображение, а затем выбирает «поделиться»> «копировать», изображение добавляется на монтажный стол. Иногда это не изображение, а URL-адрес изображения. Я обрабатываю оба случая:

//MARK: - Ext. Delegate SFSafariViewControllerDelegate
extension ProjectImagePicker: SFSafariViewControllerDelegate {
    public func safariViewControllerDidFinish(_ controller: SFSafariViewController) {
        //image was returned by Copy
        if pasteboard.hasImages {
            guard let image = pasteboard.image else { return }
            self.delegate?.didSelect(image: image)
        //Image Url was returned by Copy
        } else if pasteboard.hasURLs {
            guard let url = pasteboard.url else { return }
            print(url)
            if let data = try? Data(contentsOf: url) {
                if let image = UIImage(data: data) {
                    self.delegate?.didSelect(image: image)
                }
            }
        }
        pasteboard.items.removeAll()
        controller.dismiss(animated: true, completion: nil)
    }
}

Кажется, работает как задумано! ?

...