|
@@ -59,32 +59,46 @@ RCT_EXPORT_METHOD(takeSnapshot:(nonnull NSNumber *)target
|
59
|
59
|
|
60
|
60
|
// Capture image
|
61
|
61
|
BOOL success;
|
|
62
|
+
|
|
63
|
+ UIView* rendered;
|
|
64
|
+ UIScrollView* scrollView;
|
62
|
65
|
if (snapshotContentContainer) {
|
63
|
66
|
if (![view isKindOfClass:[RCTScrollView class]]) {
|
64
|
67
|
reject(RCTErrorUnspecified, [NSString stringWithFormat:@"snapshotContentContainer can only be used on a RCTScrollView. instead got: %@", view], nil);
|
65
|
68
|
return;
|
66
|
69
|
}
|
67
|
70
|
RCTScrollView* rctScrollView = view;
|
68
|
|
- UIScrollView* scrollView = rctScrollView.scrollView;
|
69
|
|
- CGPoint savedContentOffset = scrollView.contentOffset;
|
70
|
|
- CGRect savedFrame = scrollView.frame;
|
|
71
|
+ scrollView = rctScrollView.scrollView;
|
|
72
|
+ rendered = scrollView;
|
|
73
|
+ }
|
|
74
|
+ else {
|
|
75
|
+ rendered = view;
|
|
76
|
+ }
|
|
77
|
+
|
|
78
|
+ if (size.width < 0.1 || size.height < 0.1) {
|
|
79
|
+ size = snapshotContentContainer ? scrollView.contentSize : view.bounds.size;
|
|
80
|
+ }
|
|
81
|
+ if (size.width < 0.1 || size.height < 0.1) {
|
|
82
|
+ reject(RCTErrorUnspecified, [NSString stringWithFormat:@"The content size must not be zero or negative. Got: (%g, %g)", size.width, size.height], nil);
|
|
83
|
+ return;
|
|
84
|
+ }
|
|
85
|
+
|
|
86
|
+ CGPoint savedContentOffset;
|
|
87
|
+ CGRect savedFrame;
|
|
88
|
+ if (snapshotContentContainer) {
|
|
89
|
+ // Save scroll & frame and set it temporarily to the full content size
|
|
90
|
+ savedContentOffset = scrollView.contentOffset;
|
|
91
|
+ savedFrame = scrollView.frame;
|
71
|
92
|
scrollView.contentOffset = CGPointZero;
|
72
|
93
|
scrollView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height);
|
73
|
|
- if (size.width < 0.1 || size.height < 0.1) {
|
74
|
|
- size = scrollView.contentSize;
|
75
|
|
- }
|
76
|
|
- UIGraphicsBeginImageContextWithOptions(size, NO, 0);
|
77
|
|
- success = [scrollView drawViewHierarchyInRect:(CGRect){CGPointZero, size} afterScreenUpdates:YES];
|
|
94
|
+ }
|
|
95
|
+ UIGraphicsBeginImageContextWithOptions(size, NO, 0);
|
|
96
|
+ success = [rendered drawViewHierarchyInRect:(CGRect){CGPointZero, size} afterScreenUpdates:YES];
|
|
97
|
+ if (snapshotContentContainer) {
|
|
98
|
+ // Restore scroll & frame
|
78
|
99
|
scrollView.contentOffset = savedContentOffset;
|
79
|
100
|
scrollView.frame = savedFrame;
|
80
|
101
|
}
|
81
|
|
- else {
|
82
|
|
- if (size.width < 0.1 || size.height < 0.1) {
|
83
|
|
- size = view.bounds.size;
|
84
|
|
- }
|
85
|
|
- UIGraphicsBeginImageContextWithOptions(size, NO, 0);
|
86
|
|
- success = [view drawViewHierarchyInRect:(CGRect){CGPointZero, size} afterScreenUpdates:YES];
|
87
|
|
- }
|
88
|
102
|
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
|
89
|
103
|
UIGraphicsEndImageContext();
|
90
|
104
|
|