视图中没有工具栏的屏幕截图
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)
}
}
}
}
我有一个带有屏幕截图按钮的工具栏。这很好用,但我想在不查看工具栏的情况下截取屏幕截图。我已经尝试过我在 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)
}
}
}
}