Skip to content

Instantly share code, notes, and snippets.

@Samfox2
Forked from tsuzukihashi/TestPage.swift
Created February 6, 2022 21:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Samfox2/ec1e57fb53feae9b6c12130ecc7d6827 to your computer and use it in GitHub Desktop.
Save Samfox2/ec1e57fb53feae9b6c12130ecc7d6827 to your computer and use it in GitHub Desktop.
SwiftUI View to UIImage
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()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment