Na minha busca penosa por uma maneira de usar o AVCapture para a funcionalidade de câmera que salva uma imagem, encontrei um ótimo tutorial do YouTube que usava o UIKit. Como eu queria implementar isso em um aplicativo que foi totalmente construído no SwiftUI, simplesmente criei uma estrutura HostedViewController em um ViewController que continha o código do tutorial do UIKit. Essa hospedagem funcionou (e ainda funciona) muito bem isoladamente, mas meu aplicativo requer que a imagem capturada seja passada para uma visualização SwiftUI (apenas o arquivo ContentView padrão). Como devo fazer isso? Meu pensamento inicial era passar a imagem como uma ligação da visualização SwiftUI para o ViewController, mas eu estava com dificuldades para implementar isso.
Aqui está meu arquivo ContentView:
import AVFoundation
import UIKit
struct ContentView: View {
var body: some View {
ZStack {
Color.purple
HostedViewController()
.ignoresSafeArea()
}
}
}
#Preview {
ContentView()
}
Aqui estão as partes relevantes do meu arquivo ViewController:
class ViewController: UIViewController {
// capture session
var session: AVCaptureSession?
// photo output
let output = AVCapturePhotoOutput()
// video preview
let previewLayer = AVCaptureVideoPreviewLayer()
//The rest is a bunch of AVCapture stuff that isn't relevant to my question
@objc private func didTapTakePhoto() {
output.capturePhoto(with: AVCapturePhotoSettings(), delegate: self)
}
}
extension ViewController: AVCapturePhotoCaptureDelegate {
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
guard let data = photo.fileDataRepresentation() else {
return
}
//saves the image, this is the data I want to pass to the ContentView
let image = UIImage(data: data)
//displays the image
session?.stopRunning()
let imageView = UIImageView(image: image)
imageView.contentMode = .scaleAspectFill
imageView.frame = view.bounds
view.addSubview(imageView)
}
}
struct HostedViewController: UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> UIViewController {
return ViewController()
}
func updateUIViewController(_ uiViewController: UIViewController, context: Context) {
}
typealias UIViewControllerType = UIViewController
}
Quais são as alterações exatas que preciso fazer para poder acessar a constante de imagem do arquivo ViewController no arquivo ContentView?
Muito obrigado antecipadamente.