【问题标题】:how to let the user pick an image on a website如何让用户在网站上选择图片
【发布时间】:2020-05-08 16:47:09
【问题描述】:

作为我应用中的选项之一,我想让用户访问 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 来完成,如果可以,该怎么做?

对正确方向的任何推动表示赞赏!

【问题讨论】:

    标签: ios image web swift5


    【解决方案1】:

    我已经这样解决了:

    我展示了一个 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)
        }
    }
    

    似乎按预期工作! ?

    【讨论】:

      猜你喜欢
      • 2014-02-17
      • 2011-01-23
      • 2013-08-08
      • 2023-03-13
      • 1970-01-01
      • 2021-06-19
      • 2011-11-17
      • 2011-02-06
      • 2015-07-10
      相关资源
      最近更新 更多