Exibir a visualização raiz para captura em tela cheia
Para capturar toda a tela do aplicativo, é necessário ter acesso à raiz UIView. Adicione uma extensão:
UIApplication+rootViewController.swift
import UIKit
extension UIApplication {
var rootViewController: UIViewController? {
connectedScenes
.compactMap { $0 as? UIWindowScene }
.flatMap { $0.windows }
.first { $0.isKeyWindow }?
.rootViewController
}
}
Em seguida, use:
guard let rootView = UIApplication.shared.rootViewController?.view else { return }
capturer = ScreenCapturer(withView: rootView)
Método alternativo: Capturar uma região específica com UIViewRepresentable
Nas etapas a seguir, mostraremos como integrar o `rootView` ao ScreenCapturer. No entanto, caso você prefira capturar uma região específica da tela, é possível capturar uma área específica UIView com o suporte do SwiftUI. Crie um UIViewRepresentable que gera a visualização que você deseja compartilhar, incorpore-a ao seu layout e passe seu UIView para o capturador (por exemplo, por meio de um callback quando makeUIView execuções).
Exemplo — uma marca de tempo compartilhável:
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
}
}
Exibição TimeLabelView no SwiftUI e conectar seu UIView no seu gerenciador (por exemplo, por meio de @State e um onAppear / Coordinator), e depois passar essa visualização para ScreenCapturer(withView:) para compartilhar apenas essa área, em vez da tela inteira.
Compartilhamento de tela
Saiba como implementar o recurso de compartilhamento de tela usando a plataforma Vonage Video API.