Exposer la vue de la racine pour une capture en plein écran
Pour capturer l'intégralité de l'écran de l'application, vous devez accéder à la racine. UIView. Ajouter une extension :
UIApplication+rootViewController.swift
import UIKit
extension UIApplication {
var rootViewController: UIViewController? {
connectedScenes
.compactMap { $0 as? UIWindowScene }
.flatMap { $0.windows }
.first { $0.isKeyWindow }?
.rootViewController
}
}
Ensuite, utilisez :
guard let rootView = UIApplication.shared.rootViewController?.view else { return }
capturer = ScreenCapturer(withView: rootView)
Autre solution : Capturer une région spécifique avec UIViewRepresentable
Dans les étapes suivantes, nous vous montrerons comment connecter le rootView au ScreenCapturer. Cependant, si vous préférez capturer une région spécifique de l'écran, vous pouvez capturer une image spécifique de l'écran. UIView soutenu par SwiftUI. Créer un UIViewRepresentable qui produit la vue que vous souhaitez partager, intégrez-la dans votre mise en page et transmettez-lui son contenu sous-jacent UIView au capteur (par exemple, par le biais d'un rappel lorsque l'option makeUIView fonctionne).
Exemple : une étiquette temporelle à partager :
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
}
}
Affichage TimeLabelView dans SwiftUI et de câbler son UIView dans votre gestionnaire (par exemple via @State et un onAppear / Coordinator), puis transmet cette vue à ScreenCapturer(withView:) pour ne partager que cette région au lieu de l'écran complet.
Partage d'écran
Apprenez à mettre en œuvre la capacité de partage d'écran en utilisant la plateforme Video API de Vonage.