UIImagePickerController cameraViewTransform在iOS 4中的行为有所不同

Edu*_*lho 6 iphone camera transform uiview uiimagepickercontroller

我将我的iPhone和SDK升级到iOS 4.0.1,现在我的应用程序运行方式与在iOS 3.x中运行的方式不同.

我的应用程序使用UIImagePickerController与自定义cameraOverlayView(我将在这篇文章中压制).重点是我需要在全屏模式下看到iphone相机.为了直接解决这个问题,我会提供一些代码和截图来解释发生了什么.

我创建了一个基于视图的应用程序中使用名为"CameraTransform" Xcode的模板项目,所以我得到了两个类:CameraTransformAppDelegateCameraTransformViewController,OK!在我CameraTransformViewControllerviewDidAppear方法中,我输入以下代码:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    UIImagePickerController* picker = [[UIImagePickerController alloc] init];

    picker.sourceType = UIImagePickerControllerSourceTypeCamera;        
    picker.delegate = self;

    //[self configurePicker_FirstAttempt:picker];   Use this!
    //[self configurePicker_SecondAttempt:picker];  Use this too!

    [self presentModalViewController:picker animated:YES];
}

- (void)configurePicker_FirstAttempt:(UIImagePickerController*) picker {
    picker.showsCameraControls = NO;
    picker.navigationBarHidden = YES;

    // not needed (use defaults)
    //picker.toolbarHidden = YES;
    //picker.wantsFullScreenLayout = YES;
}

- (void)configurePicker_SecondAttempt:(UIImagePickerController*) picker {

    // Transform values for full screen support
    CGFloat cameraTransformX = 1.0;
    CGFloat cameraTransformY = 1.12412;

    picker.cameraViewTransform = CGAffineTransformScale(picker.cameraViewTransform, cameraTransformX, cameraTransformY);
}
Run Code Online (Sandbox Code Playgroud)

用/我运行项目:

注意:

  1. 在iOS 3.x中,我使用了第三种方法(两种方法都没有注释)来配置选择器,它在全屏模式下显示,底部没有"黑条".
  2. 我检查了picker.cameraViewTransform原始值(在缩放之前)并将其设置为Identity(如预期的那样).
  3. picker.view.frame被设置为屏幕边界的(0.0,0.0,320.0,480.0)
  4. 我尝试将翻译连接到picker.cameraViewTransform(在缩放之后),就像这样:CGAffineTransformTranslate(picker.cameraViewTransform, 0.0, 20.0);我意识到隐藏了一些"摄像机视图"的部分(也许它的起源不是0.0,0.0),所以我得到了更多"相机视图"在屏幕上.

看起来在新的SDK中UIImagePickerController已经以某种方式改变了,也许相机控件具有不同的大小等等.

有谁有这个问题?

小智 14

ios 4.0 Magic number 1936/220 = 6.05,2 2592/6.05 = 428,480-428 = 52 52 /(428/2)= 0.24299 + 1 = 1.24299

ios 3.0 Magic number 1536/320 = 4.8 2048/4.8 = 427 480-427 = 53 53/427 = 0.121412 + 1 = 1.12412

这就是cameraresolution-screenresolution的关系

对于iOS 3.0,从顶部应用cameraViewTransform,因此您必须使用所有高度.但是在iOS4中,它是从框架的中心应用的,所以你必须使用一半的高度.而且你必须向下移动框架(52/2)以使框架保持在中心位置.