在视图中用相机对应用程序进行屏幕截图会返回一张空白图像



我有以下代码来截图应用程序:

var imageSize = CGSize.zero
let orientation = UIApplication.shared.statusBarOrientation
if UIInterfaceOrientationIsPortrait(orientation) {
imageSize = UIScreen.main.bounds.size
} else {
imageSize = CGSize(width: UIScreen.main.bounds.size.height, height: UIScreen.main.bounds.size.width)
}
UIGraphicsBeginImageContextWithOptions(imageSize, false, 0)
for window in UIApplication.shared.windows {
window.drawHierarchy(in: window.bounds, afterScreenUpdates: true)
}
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
self.captureImageView.image = image

这是我展示相机的代码:

let captureDevice = AVCaptureDevice.default(for: AVMediaType.video)
do {
let input = try AVCaptureDeviceInput(device: captureDevice!)
captureSession = AVCaptureSession()
captureSession?.addInput(input)
} catch {
print(error)
}
videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession!)
videoPreviewLayer?.videoGravity = AVLayerVideoGravity.resizeAspectFill
videoPreviewLayer?.frame = view.layer.bounds
self.cameraView.layer.addSublayer(videoPreviewLayer!)
let previewLayerConnection: AVCaptureConnection? = videoPreviewLayer?.connection
if previewLayerConnection?.isVideoOrientationSupported != nil {
previewLayerConnection?.videoOrientation = AVCaptureVideoOrientation.landscapeLeft
}
captureSession?.startRunning()

我已经尝试了其他stackoverflow用户关于这个问题的一切,但它并没有真正起作用。原因是什么?如何解决?

for window in UIApplication.shared.windows {
window.drawHierarchy(in: window.bounds, afterScreenUpdates: true)
}

在这里,您使用该窗口作为屏幕截图视图。默认情况下,你的窗口颜色是black,这就是为什么你会得到黑色屏幕截图。

使用一个视图控制器子视图。

尝试获取带有更新代码的第一张屏幕截图。然后用你的相机实现。

你的代码应该像这个

view.drawHierarchy(in: view.bounds, afterScreenUpdates: true)

最新更新