Created
March 19, 2025 08:35
-
-
Save Codelaby/db8b7b47c96d1d47c8b89b23fe021e57 to your computer and use it in GitHub Desktop.
snapshot View to image in swift
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// Renders `View` as `UIImage`. | |
extension View { | |
func snapshot(renderOnce: UnsafeMutablePointer<Bool>? = nil) -> UIImage? { | |
if let flag = renderOnce, flag.pointee { | |
return nil | |
} | |
renderOnce?.pointee = true | |
let renderer = ImageRenderer(content: self) | |
renderer.scale = UIScreen.main.scale | |
return renderer.uiImage | |
} | |
} | |
@MainActor | |
final class ViewSnapshotter<V: View> { | |
private let view: V | |
private var didRender = false | |
init(view: V) { | |
self.view = view | |
} | |
/// Continiously renders the view as a UIImage. | |
@inlinable | |
func render() -> UIImage? { | |
view.snapshot() | |
} | |
/// Renders the view as a UIImage once and then never again. | |
@inlinable | |
func renderOnce() -> UIImage? { | |
view.snapshot(renderOnce: &didRender) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment