I have been using below code to scale my UIImagePickerController's live preview to fill the entire screen. This worked perfectly till now. Before few days, I installed iOS 10 beta 7 on an iPhone 5 and it doesn't scale anymore. I can see black patch at the bottom of UIImagePickerController's view. Seems like cameraViewTransform
is ignoring the CGAffineTransformMakeScale
and CGAffineTransformMakeTranslation
calls.
This is how I initiate my camera controller. I have set both "allowsEditing" and "showsCameraControls" to 'NO' in order to provide my own custom overlay view.
objImagePickerController =[[UIImagePickerController alloc] init];
objImagePickerController.delegate = self;
objImagePickerController.sourceType =UIImagePickerControllerSourceTypeCamera;
objImagePickerController.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto;
objImagePickerController.allowsEditing = NO;
objImagePickerController.showsCameraControls= NO;
This is what I use to scale the camera live preview.
CGSize screenSize = [[UIScreen mainScreen] bounds].size;
float screenHeight= MAX(screenSize.height, screenSize.width);
float screenWidth= MIN(screenSize.height, screenSize.width);
float cameraAspectRatio = 4.0 / 3.0;
float imageWidth = floorf(screenWidth * cameraAspectRatio);
float scale = ceilf((screenHeight / imageWidth) * 10.0) / 10.0;
objImagePickerController.cameraViewTransform= CGAffineTransformMakeScale(scale, scale);
This is how I add the camera view as a subview instead of traditional modal presentation method, to suit my own requirements.
[[[UIApplication sharedApplication] keyWindow]addSubview:objImagePickerController.view];
screenshot from iPhone 5s running on iOS 10 beta 8
screenshot from iPhone 5s running on iOS 8.2
As noticeable from the above screenshots, the cameraViewTransform
doesn't respect the CGAffineTransformMakeScale
in iOS 10 beta.
Did anybody else face this issue? This is a really weird behavior appearing in iOS 10 beta OS. I am unable to find a workaround for this. Please advise.
NOTE:: objImagePickerController is an instance of UIImagePickerController.
corrigé dans la version ios 10.2 Issue solved in ios 10.2 version
I had the same problem earlier in IOS 9.3 also. Here is the code i used
Hope this helps
Strangely it only allows us to transform it after the presentation was completed.
Example:
This code will transform the camera view to match the screen size.
Note that this is a workaround. It works, but the user will see it resizing upon presentation.
As answered here, this issue has been fixed in iOS 10.2 and you can use the
cameraViewTransform
property before presenting the camera again.I've solved by delaying set cameraViewTransform after camera e AVCaptureSessionDidStartRunningNotification is raised:
-
I had the same problem in my augmented reality application and finally solved it by using AVFoundation framework instead of UIImagePickerController. It seems that
cameraViewTransform
no longer works on iOS 10.The code below worked for me. Add the function to your UIViewController subclass and call it.
The most important thing is to use
AVLayerVideoGravityResizeAspectFill
. With this configuration, the camera view fills the container view keeping its original aspect ratio.Don't forget to import the framework:)