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