kub*_*ubi 56 iphone uiimagepickercontroller
截图http://i39.tinypic.com/oiermb.png
我正在为UIImagePickerController添加一个自定义叠加层,并且视图底部有一个持久的黑条.这是我实例化控制器的代码.
- (UIImagePickerController *)imagePicker {
if (_imagePicker) {
return _imagePicker;
}
_imagePicker = [[UIImagePickerController alloc] init];
_imagePicker.delegate = self;
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
_imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
_imagePicker.showsCameraControls = NO;
_imagePicker.wantsFullScreenLayout = YES;
_imagePicker.navigationBarHidden = YES;
_imagePicker.toolbarHidden = YES;
} else {
_imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
}
return _imagePicker;
}
Run Code Online (Sandbox Code Playgroud)
返回的控制器以模态方式显示,并且当我没有隐藏相机控件时工作正常(即显示全屏).
感谢Ole的建议,我使用了这段代码:
// Resize the camera preview
_imagePicker.cameraViewTransform = CGAffineTransformMakeScale(1.0, 1.03);
Run Code Online (Sandbox Code Playgroud)
高度增加3%就可以了.当我在屏幕底部添加自定义工具栏时,窗口上不再有可见的黑条.
Ste*_*eve 51
按固定值缩放并不是一个好主意......因为我确信在iPhone 5出现时,任何使用此接受答案的人都可能会发现.
这是一个代码片段,可根据屏幕分辨率动态缩放以消除字母装箱.
// Device's screen size (ignoring rotation intentionally):
CGSize screenSize = [[UIScreen mainScreen] bounds].size;
// iOS is going to calculate a size which constrains the 4:3 aspect ratio
// to the screen size. We're basically mimicking that here to determine
// what size the system will likely display the image at on screen.
// NOTE: screenSize.width may seem odd in this calculation - but, remember,
// the devices only take 4:3 images when they are oriented *sideways*.
float cameraAspectRatio = 4.0 / 3.0;
float imageWidth = floorf(screenSize.width * cameraAspectRatio);
float scale = ceilf((screenSize.height / imageWidth) * 10.0) / 10.0;
self.ipc.cameraViewTransform = CGAffineTransformMakeScale(scale, scale);
Run Code Online (Sandbox Code Playgroud)
Ole*_*ann 37
相机的宽高比为4:3,屏幕的宽高比为3:2.所以除非你愿意裁剪到3:2,否则根本无法让相机图片填满屏幕.为此,请应用适当的比例变换.
str*_*e10 21
嘿我看到有人在计算iPhone 5的比例后仍然在底部的黑色条.我有这个问题一段时间但我发现你必须翻译视图所以它在屏幕的中间然后应用比例.这是我做这两件事的代码,对我有用!
CGSize screenBounds = [UIScreen mainScreen].bounds.size;
CGFloat cameraAspectRatio = 4.0f/3.0f;
CGFloat camViewHeight = screenBounds.width * cameraAspectRatio;
CGFloat scale = screenBounds.height / camViewHeight;
m_imagePickerController.cameraViewTransform = CGAffineTransformMakeTranslation(0, (screenBounds.height - camViewHeight) / 2.0);
m_imagePickerController.cameraViewTransform = CGAffineTransformScale(m_imagePickerController.cameraViewTransform, scale, scale);
Run Code Online (Sandbox Code Playgroud)
eme*_*gro 10
用它改变它:
#define CAMERA_TRANSFORM 1.12412
_picker.wantsFullScreenLayout = YES;
_picker.cameraViewTransform = CGAffineTransformScale(_picker.cameraViewTransform, CAMERA_TRANSFORM, CAMERA_TRANSFORM);
Run Code Online (Sandbox Code Playgroud)
Enr*_*ini 10
根据我在iOS 7,iphone 5S上的经验,要看到图片的中心进入全屏预览,你必须连接转换,而不是按顺序进行:
pickerController.cameraOverlayView = self.view;
CGSize screenSize = [[UIScreen mainScreen] bounds].size; // 320 x 568
float scale = screenSize.height / screenSize.width*3/4; // screen height divided by the pickerController height ... or: 568 / ( 320*4/3 )
CGAffineTransform translate=CGAffineTransformMakeTranslation(0,(screenSize.height - screenSize.width*4/3)*0.5);
CGAffineTransform fullScreen=CGAffineTransformMakeScale(scale, scale);
pickerController.cameraViewTransform =CGAffineTransformConcat(fullScreen, translate);
Run Code Online (Sandbox Code Playgroud)
这是 Swift 的答案。
let screenSize:CGSize = UIScreen.mainScreen().bounds.size
let ratio:CGFloat = 4.0 / 3.0
let cameraHeight:CGFloat = screenSize.width * ratio
let scale:CGFloat = screenSize.height / cameraHeight
let imag:UIImagePickerController = UIImagePickerController()
imag.cameraViewTransform = CGAffineTransformMakeTranslation(0, (screenSize.height - cameraHeight) / 2.0)
imag.cameraViewTransform = CGAffineTransformScale(imag.cameraViewTransform, scale, scale)
Run Code Online (Sandbox Code Playgroud)
小智 6
这在 iOS 10 上对我有用:
let screenSize = UIScreen.main.bounds.size
let cameraAspectRatio = CGFloat(4.0 / 3.0)
let cameraImageHeight = screenSize.width * cameraAspectRatio
let scale = screenSize.height / cameraImageHeight
imagePickerController.cameraViewTransform = CGAffineTransform(translationX: 0, y: (screenSize.height - cameraImageHeight)/2)
imagePickerController.cameraViewTransform = imagePickerController.cameraViewTransform.scaledBy(x: scale, y: scale)
Run Code Online (Sandbox Code Playgroud)