iOS 4.3上的cameraOverlayView问题

时间:2011-05-10 15:27:23

标签: iphone uiimageview uiimagepickercontroller ios4

我正在使用带有cameraOverlayView的选择器控制器在摄像机视图中显示产品的图像。在应用叠加层之前,会调整产品图像的大小。 它在iOS 4.2上运行良好,但在iOS 4.3上,产品图像显示为完整尺寸。

pickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
UIImageView *imgView =  [[[UIImageView alloc] initWithImage:[UIImage imageNamed:produitAffiche.img_realite]] autorelease];

// Resize
if(imgView.frame.size.height == 480)
{
    //Portrait
    imgView.frame = CGRectMake(80.0f, 120.0f, 160.0f, 240.0f);
}
else
{
    // Landscape
    imgView.frame = CGRectMake(40.0f, 160.0f, 240.0f, 160.0f);
}

imgView.contentMode = UIViewContentModeCenter;
imgView.clipsToBounds = NO;
imgView.contentMode = UIViewContentModeScaleAspectFit;  

pickerController.cameraOverlayView = (UIView *) imgView;

我更改了我用作叠加层的UIImageView的帧,但它仍然以320 * 480显示。 我知道cameraOverlayView已经在iOS 4.3中进行了修改,但我不知道发生了什么变化以及我需要做些什么来纠正我的应用程序。

感谢您的帮助。

5 个答案:

答案 0 :(得分:2)

在iOS 4.3中,叠加视图会拉伸到全屏。因为您将内容模式设置为宽高比适合,所以图像会被拉伸以适应新的视图大小,即320x480。

您需要创建一个全屏的透明UIView,将imageview添加到该视图并使UIView成为新的叠加视图。

UIView *fullscreenView = [[UIView alloc] initWithFrame:CGRectZero];
fullscreenView.backgroundColor = [UIColor clearColor];
....
 [fullscreenView addSubview:imgView];
pickerController.cameraOverlayView = fullscreenView;

答案 1 :(得分:0)

找到符合条件的this article。它的长短是使用

- (UIImage *)
  resizedImageWithContentMode:(UIViewContentMode)contentMode
                       bounds:(CGSize)bounds
         interpolationQuality:(CGInterpolationQuality)quality;

答案 2 :(得分:0)

在代码中注释掉这一行

  

imgView.clipsToBounds = NO;

它应该工作。 如果你真的想剪辑,@ slf的答案应该会有所帮助。

答案 3 :(得分:0)

尝试设置UIImagePicker的这些属性:

mImagePickerController.showsCameraControls = NO;

mImagePickerController.navigationBarHidden = YES;

mImagePickerController.toolbarHidden = YES;

mImagePickerController.wantsFullScreenLayout = YES;

答案 4 :(得分:0)

我的问题实际上是在iOS5上全屏显示的UIImagePicker在iPad上无法在iOS4.3上运行。我在屏幕外启动图像选择器,然后将其设置为视图...您会看到快门图像打开,但是相机视图本身只是透明而没有相机输出。

我的解决方案是不要在iPad上为iOS4.3制作动画。看起来在屏幕外开始摄像机视图会让摄像机渲染部分落后(按照我在iOS5中的说法修复)。

对于原始问题,这个答案并不完全正确,但是我把它放在那个遇到同样问题并且像我一样遇到这个问题的人身上。