@@ -75,7 +75,7 @@ extension View {
75
75
76
76
if async {
77
77
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)
79
79
completion ( SnapshotResult ( image: imageResult. mapError { $0 } , precision: precision, accessibilityEnabled: accessibilityEnabled, accessibilityMarkers: nil , colorScheme: _colorScheme, appStoreSnapshot: appStoreSnapshot) )
80
80
}
81
81
} else {
@@ -100,11 +100,11 @@ extension View {
100
100
101
101
let elements = try ? a11yView. parseAccessibility ( useMonochromeSnapshot: false )
102
102
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)
104
104
a11yView. removeFromSuperview ( )
105
105
completion ( SnapshotResult ( image: result. mapError { $0 } , precision: precision, accessibilityEnabled: accessibilityEnabled, accessibilityMarkers: elements, colorScheme: _colorScheme, appStoreSnapshot: appStoreSnapshot) )
106
106
} 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)
108
108
completion ( SnapshotResult ( image: imageResult. mapError { $0 } , precision: precision, accessibilityEnabled: accessibilityEnabled, accessibilityMarkers: nil , colorScheme: _colorScheme, appStoreSnapshot: appStoreSnapshot) )
109
109
}
110
110
}
@@ -143,10 +143,19 @@ extension View {
143
143
private static func takeSnapshot(
144
144
layout: PreviewLayout ,
145
145
renderingMode: EmergeRenderingMode ? ,
146
+ window: UIWindow ,
146
147
rootVC: UIViewController ,
147
148
targetView: UIView ,
148
149
maxSize: Double = 1_000_000 ) -> Result < UIImage , RenderingError >
149
150
{
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
+
150
159
let view = targetView
151
160
let drawCode : ( CGContext ) -> Void
152
161
@@ -203,7 +212,7 @@ extension UIView {
203
212
return true
204
213
case . uiView:
205
214
return drawHierarchy ( in: CGRect ( origin: . zero, size: size) , afterScreenUpdates: true )
206
- case . none:
215
+ case . window , . none:
207
216
if !size. requiresCoreAnimationSnapshot {
208
217
return drawHierarchy ( in: CGRect ( origin: . zero, size: size) , afterScreenUpdates: true )
209
218
} else {
@@ -219,7 +228,7 @@ extension EmergeRenderingMode {
219
228
switch self {
220
229
case . coreAnimation:
221
230
return . renderLayerInContext
222
- case . uiView:
231
+ case . window , . uiView:
223
232
return . drawHierarchyInRect
224
233
}
225
234
}
0 commit comments