Skip to content

Commit 72e746e

Browse files
committed
Updated iOS functionality to provide the "captureScreenshot." This will capture the entire screen all the views currently displayed. This performs a native screen capture, so a ref tag is not required.
1 parent 8df4c24 commit 72e746e

File tree

1 file changed

+25
-2
lines changed

1 file changed

+25
-2
lines changed

ios/RNViewShot.m

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@ - (dispatch_queue_t)methodQueue
1919
return RCTGetUIManagerQueue();
2020
}
2121

22+
RCT_EXPORT_METHOD(captureScreenshot: (NSDictionary *)options
23+
resolve:(RCTPromiseResolveBlock)resolve
24+
reject:(RCTPromiseRejectBlock)reject)
25+
{
26+
[captureRef -1, options, resolve, reject];
27+
}
2228

2329
RCT_EXPORT_METHOD(releaseCapture:(nonnull NSString *)uri)
2430
{
@@ -41,7 +47,14 @@ - (dispatch_queue_t)methodQueue
4147

4248
// Get view
4349
UIView *view;
44-
view = viewRegistry[target];
50+
51+
if (target == -1) {
52+
UIWindow *window = [[UIApplication sharedApplication] keyWindow];
53+
view = window.rootViewController.view;
54+
} else {
55+
view = viewRegistry[target];
56+
}
57+
4558
if (!view) {
4659
reject(RCTErrorUnspecified, [NSString stringWithFormat:@"No view found with reactTag: %@", target], nil);
4760
return;
@@ -88,7 +101,17 @@ - (dispatch_queue_t)methodQueue
88101
scrollView.contentOffset = CGPointZero;
89102
scrollView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height);
90103
}
91-
UIGraphicsBeginImageContextWithOptions(size, NO, 0);
104+
105+
if (target == -1) {
106+
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
107+
UIGraphicsBeginImageContextWithOptions(currentView.window.bounds.size, NO, [UIScreen mainScreen].scale);
108+
} else {
109+
UIGraphicsBeginImageContext(currentView.window.bounds.size);
110+
}
111+
} else {
112+
UIGraphicsBeginImageContextWithOptions(size, NO, 0);
113+
}
114+
92115
success = [rendered drawViewHierarchyInRect:(CGRect){CGPointZero, size} afterScreenUpdates:YES];
93116
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
94117
UIGraphicsEndImageContext();

0 commit comments

Comments
 (0)