Mostrar la vista raíz para realizar una captura a pantalla completa
Para capturar toda la pantalla de la aplicación, necesitas acceso a la raíz UIView. Añade una extensión:
UIApplication+rootViewController.swift
import UIKit
extension UIApplication {
var rootViewController: UIViewController? {
connectedScenes
.compactMap { $0 as? UIWindowScene }
.flatMap { $0.windows }
.first { $0.isKeyWindow }?
.rootViewController
}
}
Entonces úsalo:
guard let rootView = UIApplication.shared.rootViewController?.view else { return }
capturer = ScreenCapturer(withView: rootView)
Ruta alternativa: Capturar una región específica con UIViewRepresentable
En los siguientes pasos le mostraremos como conectar el rootView al ScreenCapturer. Sin embargo, en caso de que prefiera capturar una región específica de la pantalla - puede capturar un específico UIView respaldado por SwiftUI. Cree una UIViewRepresentable que produce la vista que desea compartir, incrustarla en su diseño y pasar su subyacente UIView al capturador (por ejemplo, mediante una llamada de retorno cuando makeUIView corre).
Ejemplo: una etiqueta de tiempo compartible:
import SwiftUI
import UIKit
struct TimeLabelView: UIViewRepresentable {
let text: String
private let labelTag = 1001
func makeUIView(context: Context) -> UIView {
let container = UIView()
container.backgroundColor = .red
let label = UILabel()
label.tag = labelTag
label.textAlignment = .center
label.backgroundColor = .clear
label.textColor = .white
label.adjustsFontSizeToFitWidth = true
label.translatesAutoresizingMaskIntoConstraints = false
container.addSubview(label)
NSLayoutConstraint.activate([
label.leadingAnchor.constraint(equalTo: container.leadingAnchor),
label.trailingAnchor.constraint(equalTo: container.trailingAnchor),
label.topAnchor.constraint(equalTo: container.topAnchor),
label.bottomAnchor.constraint(equalTo: container.bottomAnchor)
])
return container
}
func updateUIView(_ uiView: UIView, context: Context) {
(uiView.viewWithTag(labelTag) as? UILabel)?.text = text
}
}
Mostrar TimeLabelView en SwiftUI y cablear su UIView a su gestor (por ejemplo, a través de @State y un onAppear / Coordinator), y a continuación pasar esa vista a ScreenCapturer(withView:) para compartir solo esa zona en lugar de toda la pantalla.
Compartir pantalla
Aprende a implementar la capacidad de compartir pantallas usando la plataforma de Video API de Vonage.