UIImagePickerController没有填充屏幕

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)

  • 对我来说,扩展在iOS 10 beta 7上不起作用.任何帮助或想法? (4认同)

Ole*_*ann 37

相机的宽高比为4:3,屏幕的宽高比为3:2.所以除非你愿意裁剪到3:2,否则根本无法让相机图片填满屏幕.为此,请应用适当的比例变换.

  • 有没有人能够解决这个问题?使用上述因素进行缩放会使图像失真并且使用任何硬编码数字进行缩放仅适用于具有相同形状因子和坐标系的设备.有没有办法找到相机视图框架和边界并调整到窗口的边界? (7认同)

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)


tea*_*uit 6

这是 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)