import SwiftUI struct TestPage: View { @State private var rect: CGRect = .zero @State var uiImage: UIImage? = nil var body: some View { VStack { HStack { Image(systemName: "sun.haze") .font(.title) .foregroundColor(.white) Text("Hello, World!") .font(.title) .foregroundColor(.white) } .padding() .background(Color.blue) .cornerRadius(8) .background(RectangleGetter(rect: $rect)) .onAppear() { } Button(action: { self.uiImage = UIApplication.shared.windows[0].rootViewController?.view!.getImage(rect: self.rect) }) { Text("Button") .padding() .foregroundColor(Color.white) .background(Color.red) .cornerRadius(8) } if uiImage != nil { VStack { Image(uiImage: self.uiImage!) }.background(Color.green) .frame(width: 500, height: 500) } } } } struct RectangleGetter: View { @Binding var rect: CGRect var body: some View { GeometryReader { geometry in self.createView(proxy: geometry) } } func createView(proxy: GeometryProxy) -> some View { DispatchQueue.main.async { self.rect = proxy.frame(in: .global) } return Rectangle().fill(Color.clear) } } extension UIView { func getImage(rect: CGRect) -> UIImage { let renderer = UIGraphicsImageRenderer(bounds: rect) return renderer.image { rendererContext in layer.render(in: rendererContext.cgContext) } } } struct TestPage_Previews: PreviewProvider { static var previews: some View { TestPage() } }