我正在使用camView.cameraViewTransform = CGAffineTransformMakeScale(1.0, 1.0) ;
但不同设备会得到不同的结果,标签栏和相机之间会出现黑条。如果我更改scaling
的值,则相机太大了。对此事的任何帮助都将非常感激。
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[self prepareCamera];
}
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:NO];
[self launchCamera];
}
- (void)prepareCamera{
camView = [[UIImagePickerController alloc] init];
camView.delegate = self;
camView.sourceType = UIImagePickerControllerSourceTypeCamera;
camView.showsCameraControls = NO;
[self resizeCameraView];
}
- (void)resizeCameraView{
CGSize screenSize = self.view.bounds.size;
// set the aspect ratio of the camera
float heightRatio = 4.0f / 3.0f;
// calculate the height of the camera based on the screen width
float cameraHeight = screenSize.width * heightRatio;
// calculate the ratio that the camera height needs to be scaled by
float scale = screenSize.height / cameraHeight;
// move the controller to the center of the screen
camView.cameraViewTransform = CGAffineTransformMakeTranslation(0, (screenSize.height - cameraHeight) / 2.0);
// concatenate the scale transform
camView.cameraViewTransform = CGAffineTransformScale(camView.cameraViewTransform, scale, scale);
}
- (void)launchCamera{
[camSubView addSubview:camView.view];
[camView viewWillAppear:YES];
[camView viewDidAppear:YES];
}
答案 0 :(得分:3)
Apple正式支持您正在努力实现的目标。来自UIImagePickerController Class Reference:
要使用包含其默认控件的图像选择器控制器,请执行以下步骤:
...
- 醇>
显示用户界面。 在iPhone或iPod touch上,通过调用当前活动视图控制器的
presentViewController:animated:completion:
方法以模态方式(全屏)执行此操作,将已配置的图像选择器控制器作为新视图控制器传递。 / p>在iPad上,如果指定源类型为UIImagePickerControllerSourceTypeCamera,则可以使用模式(全屏)或使用弹出窗口显示图像选择器。但是,Apple建议您仅以全屏方式显示相机界面。
您可以做的是以模态方式(全屏)呈现UIImagePickerController并添加具有cameraOverlayView
属性的自定义控件。
<强>解决方案强>
要实现您想要的功能,您必须使用AVFoundation而不是UIImagePickerController。 AV Foundation库提供了一种更强大的拍照方式,可让您将相机视图放入自己的应用程序中。您可以找到一个好的教程here,或者更新的here
答案 1 :(得分:1)
问题是你想在结果中得到什么。 CGAffineTransformMakeScale(1.0,1.0)是默认比例 - 所以这不做任何更改。 所有苹果设备上的相机都具有4:3的宽高比。另外,我必须承认默认的摄像机视图的大小与屏幕宽度相等,高度可以促成4:3的升级 - 这就是为什么你总是有不同的摄像机视图。
如果你想要高度等于屏幕高度的摄像机视图,你需要做一些仿射变换。这是一个例子:
CGFloat cameraAspectRation = 4.0/3.0;
CGFloat cameraViewStarterHeight = screenSize.width*cameraAspectRation;
CGFloat cameraAdjustedYPosition = (screenSize.height - cameraViewStarterHeight)/2 - 20;
CGFloat cameraScaleTransformCoef = screenSize.height/cameraViewStarterHeight;
CGAffineTransform adjustedYPositionTransform = CGAffineTransformMakeTranslation(0, cameraAdjustedYPosition);
CGAffineTransform adjustedScaleTransform = CGAffineTransformMakeScale(cameraScaleTransformCoef, cameraScaleTransformCoef);
self.cameraViewTransform = CGAffineTransformConcat(adjustedYPositionTransform, adjustedScaleTransform);
但是通过这种方式,正如您所看到的那样,摄像机视图将被缩放&#34;。 希望这能帮助您了解您遇到的问题。