Skip to content

Instantly share code, notes, and snippets.

@auramagi
Created June 7, 2022 08:08
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 auramagi/46227b165371a7ac5c99acd60b8e3f80 to your computer and use it in GitHub Desktop.
Save auramagi/46227b165371a7ac5c99acd60b8e3f80 to your computer and use it in GitHub Desktop.
Using SwiftUI ImageRenderer in view modifier-like view extension
import SwiftUI
struct ContentView: View {
var body: some View {
Text("Hello WWDC22")
.rendered(scale: 2)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
extension View {
@MainActor func rendered(scale: CGFloat = 1) -> some View {
return RenderedView(content: self, scale: scale)
}
}
@MainActor struct RenderedView<Content: View>: View {
let render: () -> UIImage?
init(content: Content, scale: CGFloat) {
let renderer = ImageRenderer(content: content)
renderer.scale = scale
self.render = { renderer.uiImage }
}
var body: some View {
render().map(Image.init(uiImage:))
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment