Я пытаюсь навсегда сделать фотографию программно на iOS с помощью Swift.Однако типичные методы, такие как:
let renderer = UIGraphicsImageRenderer(size: view.bounds.size)
let image = renderer.image { ctx in
view.drawHierarchy(in: view.bounds, afterScreenUpdates: true)
}
UIImageWriteToSavedPhotosAlbum(newImage, nil, nil, nil)
, не работают.Они фотографируют все, но не живое видео (с помощью камеры) в фоновом режиме.По-видимому, эти методы не включают живое видео с камеры в скриншоты из соображений безопасности / разрешений [живая камера на скриншоте полностью белая], но есть обходные пути.Я знаю, что есть ответ: Можно ли визуализировать AVCaptureVideoPreviewLayer в графическом контексте? , но он написан на всех Objective-C, которые я не могу прочитать или использовать, и я не уверен, как этоработает.Кроме того, были предложения использовать Metal, но я также не нашел учебник по Swift.
Может кто-нибудь показать мне (подробно) некоторый код Swift о том, как сделать снимок экрана, включая фотографиюживого видео на экране.Я уверен, что это поможет всем остальным пользователям Swift.
Спасибо
Редактировать: Код живого видео
let captureDevice = AVCaptureDevice.default(for: AVMediaType.video)
do {
let input = try AVCaptureDeviceInput(device: captureDevice!)
captureSession = AVCaptureSession()
captureSession?.addInput(input)
videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession!)
videoPreviewLayer?.videoGravity = AVLayerVideoGravity.resizeAspectFill
videoPreviewLayer?.frame = view.layer.bounds
previewView.layer.addSublayer(videoPreviewLayer!)
captureSession?.startRunning()
let dataOutPut = AVCaptureVideoDataOutput()
dataOutPut.setSampleBufferDelegate(self, queue: DispatchQueue(label: "videoQueue"))
captureSession?.addOutput(dataOutPut)
} catch {
print(error)
}