我将iPhone和SDK升级到iOS 4.0.1,现在我的应用程序运行方式与在iOS 3.x中运行的方式不同。
我的应用程序使用UIImagePickerController和自定义cameraOverlayView(我将在这篇文章中予以抑制)。重点是我需要在全屏模式下看到iphone相机。为了直接解决这个问题,我会提供一些代码和截图来解释发生了什么。
我使用名为“CameraTransform”的XCode模板项目创建了一个基于视图的应用程序,所以我有两个类:CameraTransformAppDelegate
和CameraTransformViewController
,好吧!在CameraTransformViewController
的{{1}}方法中,我输入了以下代码:
viewDidAppear
用/ i运行项目:
- (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);
}
和configurePicker_FirstAttempt
方法调用已注释:defaultPicker.png。configurePicker_SecondAttempt
方法调用评论:configurePicker_FirstAttempt.png。configurePicker_SecondAttempt
和configurePicker_FirstAttempt
方法调用取消注释:configurePicker_SecondAttempt.png。注:
configurePicker_SecondAttempt
原始值(在缩放之前)并将其设置为Identity(按预期方式)。picker.cameraViewTransform
设置为屏幕边界(0.0,0.0,320.0,480.0)picker.view.frame
(缩放后),如下所示:picker.cameraViewTransform
我意识到隐藏了一些“相机视图”的部分(也许是原点不是0.0,0.0),所以我在屏幕上得到了更多的“相机视图”。看起来在新的SDK中,UIImagePickerController已经以某种方式发生了变化,也许相机控件的大小也不同。
有人有这个问题吗?
答案 0 :(得分: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)以使框架保持在中心位置。
答案 1 :(得分:4)
我不确定iOS 3.0,但对于iOS 4.0,cameraViewTransform是从帧的中心应用的。您可以先应用转换变换来验证这一点。
CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, 27.0);
imagePickerController.cameraViewTransform = translate;
您可以看到这会将视图移动到中心。接下来应用缩放变换,您将看到它填满了屏幕。
CGAffineTransform scale = CGAffineTransformScale(translate, 1.125, 1.125);
imagePickerController.cameraViewTransform = scale;
如果缩放变换仅适用于iOS 3和公司,那么变换将应用于不同的锚点,如中心顶部。您应始终在两个方向上线性缩放,否则图像将会歪斜。
答案 2 :(得分:3)
CGAffineTransformMakeTranslation不会直接在cameraViewTransform上运行。因此,使用CGAffineTransformScale来应用CGAffineTransformMakeTranslation。
float yOffset = 44.0;
CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, yOffset);
self.cameraFeed.cameraViewTransform = CGAffineTransformScale(translate, 1, 1);
答案 3 :(得分:2)
我发现iPhone 4的新比例变换为~1.25(而不是~1.12)。
我花了几分钟试图找出这些神奇数字的来源 - 我假设屏幕分辨率和屏幕分辨率之间存在某种关系。相机分辨率,但我无法匆忙解决......
如果有人,请发一个答案 - 我讨厌魔术数字。
仅供参考,iPhone 4的相机分辨率为2592x1936,而iPhone 3GS的相机分辨率为2048x1536。