From 4aeea4d2dc14cf02dc3766043e2938bf367c6170 Mon Sep 17 00:00:00 2001 From: Enrico Bern Hardy Tanuwidjaja Date: Thu, 15 Nov 2018 12:08:44 -0800 Subject: [PATCH] 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 --- Libraries/CameraRoll/RCTImagePickerManager.m | 42 +++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/Libraries/CameraRoll/RCTImagePickerManager.m b/Libraries/CameraRoll/RCTImagePickerManager.m index 96932c473f3446..b8e570cfcd7b77 100644 --- a/Libraries/CameraRoll/RCTImagePickerManager.m +++ b/Libraries/CameraRoll/RCTImagePickerManager.m @@ -16,6 +16,16 @@ #import #import +@interface RCTImagePickerController : UIImagePickerController + +@property (nonatomic, assign) BOOL unmirrorFrontFacingCamera; + +@end + +@implementation RCTImagePickerController + +@end + @interface RCTImagePickerManager () @end @@ -31,6 +41,22 @@ @implementation RCTImagePickerManager @synthesize bridge = _bridge; +- (id)init +{ + if (self = [super init]) { + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(cameraChanged:) + name:@"AVCaptureDeviceDidStartRunningNotification" + object:nil]; + } + return self; +} + +- (void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self name:@"AVCaptureDeviceDidStartRunningNotification" object:nil]; +} + - (dispatch_queue_t)methodQueue { return dispatch_get_main_queue(); @@ -56,9 +82,10 @@ - (dispatch_queue_t)methodQueue return; } - UIImagePickerController *imagePicker = [UIImagePickerController new]; + RCTImagePickerController *imagePicker = [RCTImagePickerController new]; imagePicker.delegate = self; imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; + imagePicker.unmirrorFrontFacingCamera = [RCTConvert BOOL:config[@"unmirrorFrontFacingCamera"]]; if ([RCTConvert BOOL:config[@"videoMode"]]) { imagePicker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModeVideo; @@ -175,4 +202,17 @@ - (void)_dismissPicker:(UIImagePickerController *)picker args:(NSArray *)args } } +- (void)cameraChanged:(NSNotification *)notification +{ + for (UIImagePickerController *picker in _pickers) { + if ([picker isKindOfClass:[RCTImagePickerController class]] + && ((RCTImagePickerController *)picker).unmirrorFrontFacingCamera + && picker.cameraDevice == UIImagePickerControllerCameraDeviceFront) { + picker.cameraViewTransform = CGAffineTransformScale(CGAffineTransformIdentity, -1, 1); + } else { + picker.cameraViewTransform = CGAffineTransformIdentity; + } + } +} + @end