视图中没有工具栏的屏幕截图

Screenshot without toolbar in view

我有一个带有屏幕截图按钮的工具栏。这很好用,但我想在不查看工具栏的情况下截取屏幕截图。我已经尝试过我在 SO 上找到的代码,但是图像很大,我无法分辨屏幕截图是什么,因为它似乎只截取了左上角的屏幕截图。我在应用程序的不同部分还有另一个功能,允许您通过电子邮件发送屏幕截图。读入时这是巨大的,所以我在附加到电子邮件之前调整了它的大小。这很好用,但我不确定如何调整大小然后裁剪没有工具栏的屏幕截图(以红色突出显示):

我想截取没有工具栏的屏幕截图。我还在学习,所以我玩过 UIImage 和 CGRect,但没有成功。

        let imageScreenshot = view.snapshot()

        let screenWidth = self.view.frame.size.width
        let screenHeight = self.view.frame.size.height
        let cropSize = CGRect(x: 0.0, y: 0.0, width: screenWidth, height: screenHeight * 0.75)
        let imageHolder = imageScreenshot.cgImage?.cropping(to: cropSize)
        let screenshotOfWindow = UIImage(cgImage: imageHolder!)

extension UIView {
    func snapshot() -> UIImage {
        UIGraphicsBeginImageContextWithOptions(self.bounds.size, true, UIScreen.main.scale)
        self.layer.render(in: UIGraphicsGetCurrentContext()!)
        let img = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()

        return img
    }
}

经过建议用webkit截屏:

        webView!.takeSnapshot(with: nil, completionHandler: { (image, error) in
                self.screenshotOfWindow = image
                self.showScreenshotEffect()
        })

实际上,这次更改后似乎没有保存到 Core Data,而是拍摄了快照。

此代码命中第一行并绕过所有其他代码:

 webView.takeSnapshot(with: nil, completionHandler: { (image,error) in
            if let image = image {
                DispatchQueue.main.async {
                    self.webView.isHidden = true
                    self.screenshotOfWindow = image
                    }
                } else {
                    print (error?.localizedDescription as Any)
                }
        })

使用takeSnapshot(with:completionHandler:)方法拍摄wkwebview的快照。并使用在后台线程中运行的完成块。所以在主线程中更改图像。

class ViewController: UIViewController {
    @IBOutlet weak var webView: WKWebView!
    @IBOutlet weak var imageView: UIImageView!
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .white
        webView.load(URLRequest(url: URL(string: "https://www.facebook.com")!))

    }
    @IBAction func buttonAction(_ sender: UIButton) {
        webView.takeSnapshot(with: nil) { (image, error) in
            if let image = image {
                DispatchQueue.main.async {
                    self.webView.isHidden = true
                    self.imageView.image = image
                }
            } else {
                print(error?.localizedDescription)
            }
        }
    }
}