@@ -75,7 +75,7 @@ extension View {
7575
7676 if async {
7777 DispatchQueue . main. asyncAfter ( deadline: . now( ) + 2 ) {
78- let imageResult = Self . takeSnapshot ( layout: layout, renderingMode: renderingMode, rootVC: containerVC, targetView: controller. view)
78+ let imageResult = Self . takeSnapshot ( layout: layout, renderingMode: renderingMode, window : window , rootVC: containerVC, targetView: controller. view)
7979 completion ( SnapshotResult ( image: imageResult. mapError { $0 } , precision: precision, accessibilityEnabled: accessibilityEnabled, accessibilityMarkers: nil , colorScheme: _colorScheme, appStoreSnapshot: appStoreSnapshot) )
8080 }
8181 } else {
@@ -100,11 +100,11 @@ extension View {
100100
101101 let elements = try ? a11yView. parseAccessibility ( useMonochromeSnapshot: false )
102102 a11yView. sizeToFit ( )
103- let result = Self . takeSnapshot ( layout: . sizeThatFits, renderingMode: renderingMode, rootVC: containerVC, targetView: a11yView)
103+ let result = Self . takeSnapshot ( layout: . sizeThatFits, renderingMode: renderingMode, window : window , rootVC: containerVC, targetView: a11yView)
104104 a11yView. removeFromSuperview ( )
105105 completion ( SnapshotResult ( image: result. mapError { $0 } , precision: precision, accessibilityEnabled: accessibilityEnabled, accessibilityMarkers: elements, colorScheme: _colorScheme, appStoreSnapshot: appStoreSnapshot) )
106106 } else {
107- let imageResult = Self . takeSnapshot ( layout: layout, renderingMode: renderingMode, rootVC: containerVC, targetView: controller. view)
107+ let imageResult = Self . takeSnapshot ( layout: layout, renderingMode: renderingMode, window : window , rootVC: containerVC, targetView: controller. view)
108108 completion ( SnapshotResult ( image: imageResult. mapError { $0 } , precision: precision, accessibilityEnabled: accessibilityEnabled, accessibilityMarkers: nil , colorScheme: _colorScheme, appStoreSnapshot: appStoreSnapshot) )
109109 }
110110 }
@@ -143,10 +143,19 @@ extension View {
143143 private static func takeSnapshot(
144144 layout: PreviewLayout ,
145145 renderingMode: EmergeRenderingMode ? ,
146+ window: UIWindow ,
146147 rootVC: UIViewController ,
147148 targetView: UIView ,
148149 maxSize: Double = 1_000_000 ) -> Result < UIImage , RenderingError >
149150 {
151+ if renderingMode == EmergeRenderingMode . window {
152+ let renderer = UIGraphicsImageRenderer ( size: window. bounds. size)
153+ let screenshot = renderer. image { _ in
154+ window. drawHierarchy ( in: window. bounds, afterScreenUpdates: true )
155+ }
156+ return . success( screenshot)
157+ }
158+
150159 let view = targetView
151160 let drawCode : ( CGContext ) -> Void
152161
@@ -203,7 +212,7 @@ extension UIView {
203212 return true
204213 case . uiView:
205214 return drawHierarchy ( in: CGRect ( origin: . zero, size: size) , afterScreenUpdates: true )
206- case . none:
215+ case . window , . none:
207216 if !size. requiresCoreAnimationSnapshot {
208217 return drawHierarchy ( in: CGRect ( origin: . zero, size: size) , afterScreenUpdates: true )
209218 } else {
@@ -219,7 +228,7 @@ extension EmergeRenderingMode {
219228 switch self {
220229 case . coreAnimation:
221230 return . renderLayerInContext
222- case . uiView:
231+ case . window , . uiView:
223232 return . drawHierarchyInRect
224233 }
225234 }
0 commit comments