Exponer la vista raíz para la captura a pantalla completa
Para capturar toda la pantalla de la aplicación, necesitas acceder 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, a través de una devolución de llamada 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 luego pasar esa vista a ScreenCapturer(withView:) para compartir sólo esa región en lugar de la pantalla completa.
Compartir pantalla
Aprende a implementar la capacidad de compartir pantallas usando la plataforma de Video API de Vonage.