我有一个带有屏幕截图按钮的工具栏。这很好用,但是我想在没有工具栏的情况下截取屏幕截图。我已经尝试过在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)
}
})
答案 0 :(得分:1)
使用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)
}
}
}
}