Skip to content

Commit 4aeea4d

Browse files
Enrico Bern Hardy Tanuwidjajafacebook-github-bot
Enrico Bern Hardy Tanuwidjaja
authored andcommitted
Changed front-facing camera so that it shows consistent image during capture and preview
Summary: Changed front-facing camera so that it shows consistent image during capture and preview Reviewed By: mmmulani Differential Revision: D13012715 fbshipit-source-id: 043cd9178fc49ef9e8e628a866dd8e52434f7306
1 parent d9c2cda commit 4aeea4d

File tree

1 file changed

+41
-1
lines changed

1 file changed

+41
-1
lines changed

Libraries/CameraRoll/RCTImagePickerManager.m

+41-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,16 @@
1616
#import <React/RCTRootView.h>
1717
#import <React/RCTUtils.h>
1818

19+
@interface RCTImagePickerController : UIImagePickerController
20+
21+
@property (nonatomic, assign) BOOL unmirrorFrontFacingCamera;
22+
23+
@end
24+
25+
@implementation RCTImagePickerController
26+
27+
@end
28+
1929
@interface RCTImagePickerManager () <UIImagePickerControllerDelegate, UINavigationControllerDelegate>
2030

2131
@end
@@ -31,6 +41,22 @@ @implementation RCTImagePickerManager
3141

3242
@synthesize bridge = _bridge;
3343

44+
- (id)init
45+
{
46+
if (self = [super init]) {
47+
[[NSNotificationCenter defaultCenter] addObserver:self
48+
selector:@selector(cameraChanged:)
49+
name:@"AVCaptureDeviceDidStartRunningNotification"
50+
object:nil];
51+
}
52+
return self;
53+
}
54+
55+
- (void)dealloc
56+
{
57+
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"AVCaptureDeviceDidStartRunningNotification" object:nil];
58+
}
59+
3460
- (dispatch_queue_t)methodQueue
3561
{
3662
return dispatch_get_main_queue();
@@ -56,9 +82,10 @@ - (dispatch_queue_t)methodQueue
5682
return;
5783
}
5884

59-
UIImagePickerController *imagePicker = [UIImagePickerController new];
85+
RCTImagePickerController *imagePicker = [RCTImagePickerController new];
6086
imagePicker.delegate = self;
6187
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
88+
imagePicker.unmirrorFrontFacingCamera = [RCTConvert BOOL:config[@"unmirrorFrontFacingCamera"]];
6289

6390
if ([RCTConvert BOOL:config[@"videoMode"]]) {
6491
imagePicker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModeVideo;
@@ -175,4 +202,17 @@ - (void)_dismissPicker:(UIImagePickerController *)picker args:(NSArray *)args
175202
}
176203
}
177204

205+
- (void)cameraChanged:(NSNotification *)notification
206+
{
207+
for (UIImagePickerController *picker in _pickers) {
208+
if ([picker isKindOfClass:[RCTImagePickerController class]]
209+
&& ((RCTImagePickerController *)picker).unmirrorFrontFacingCamera
210+
&& picker.cameraDevice == UIImagePickerControllerCameraDeviceFront) {
211+
picker.cameraViewTransform = CGAffineTransformScale(CGAffineTransformIdentity, -1, 1);
212+
} else {
213+
picker.cameraViewTransform = CGAffineTransformIdentity;
214+
}
215+
}
216+
}
217+
178218
@end

0 commit comments

Comments
 (0)