在iPhone X上缩放全屏相机

时间:2017-12-14 18:58:59

标签: ios objective-c uiimagepickercontroller cgaffinetransform iphone-x

我已使用UIImagePickerController在我的应用中实现了自定义相机。我以前通过应用this transformation

使相机全屏显示
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
    ipc = [[UIImagePickerController alloc] init];
    ipc.delegate = self;

    ipc.sourceType = UIImagePickerControllerSourceTypeCamera;
    ipc.showsCameraControls = NO;

    [[NSBundle mainBundle] loadNibNamed:@"SnapItCameraView" owner:self options:nil];
    self.overlayView.frame = ipc.cameraOverlayView.frame;
    ipc.cameraOverlayView = self.overlayView;
    self.overlayView = nil;

    //For iphone 5+
    //Camera is 426 * 320. Screen height is 568.  Multiply by 1.333 in 5 inch to fill vertical
    CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, 71.0); //This slots the preview exactly in the middle of the screen by moving it down 71 points
    ipc.cameraViewTransform = translate;

    CGAffineTransform scale = CGAffineTransformScale(translate, 1.333333, 1.333333);
    ipc.cameraViewTransform = scale;
    ipc.showsCameraControls = NO;
    ipc.tabBarController.tabBar.hidden = YES;
    ipc.allowsEditing = NO;
    [self presentViewController:ipc animated:YES completion:nil];
}

然而,相机没有填满iPhone X的屏幕。它与屏幕顶部齐平,但底部有一个黑条。

我认为问题是1.3是垂直填充屏幕的错误比例。我希望相机能够为iPhone X填充手机的整个屏幕。

1 个答案:

答案 0 :(得分:1)

如果您可以计算它,那么硬编码该比率在这里没有多大意义。

您通过将屏幕高度(568)除以摄像机视图的高度(426)来计算1.3333。该逻辑应该在X上工作相同,但您需要提供正确的参数,而不是假设所有手机共享相同的屏幕尺寸。

另请注意,如果您选择按比例缩放,转换此图片可能会导致部分图像被切断。