关于ImagePickerController竖屏显示不正确问题

 

用过ImagePickerController,应该比较熟悉这段代码:

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

imagePicker.delegate = self;

 

imagePicker.sourceType = sourceType;

 

if (popover) {

 [popover release];

}

popover=[[UIPopoverController alloc]initWithContentViewController:imagePicker];

imagePicker.wantsFullScreenLayout = YES;

[popover presentPopoverFromRect: CGRectMake(vwPopover.frame.origin.x, vwPopover.frame.origin.y, vwPopover.size.width, 0)

inView:self.view

              permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

[imagePickerrelease];

说句公道点的话,SDK提供ImagePickerController确实存在着数不尽数的bug,远远称不上好用。不能设置它的frame,不能全屏,不能定制它的界面,不能连续拍照(每次只能拍一张照片),等等。

然而最近笔者又碰到了它的一个新的Bug。我有一个iPad应用,只支持人像模式(竖向),当程序使用PopOverController呈现ImagePickerController拍照界面时,相机镜头却被反时针旋转了90度(如下图所示)。

关于ImagePickerController竖屏显示不正确问题_第1张图片

但当我关闭屏幕(确定需要关屏),将屏幕旋转至横屏,再次弹出ImagePickerController,相机镜头却显示正常:

关于ImagePickerController竖屏显示不正确问题_第2张图片

在网上没有搜到类似的bug报告。看来只是个例,不幸偏偏被笔者遇到了。

查看苹果文档,文档说ImagePickerController只支持竖屏不支持横屏。

问题是我的应用明明只支持竖屏啊?从2张图片看,ImagePickerController明显将设备方向给判断错了,它将竖屏状态识别为横屏,而将横屏状态识别成了竖屏,这让我抓破脑袋也没想出是什么道理。

解决的办法只有在每次弹出ImagePickerController之前,检查设备方向,当设备被识别为横屏的时候(此时真正的方向却应该是竖屏。唉,将错就错吧),将ImagePickerController的方向顺时针旋转90度:

if (sourceType==UIImagePickerControllerSourceTypeCamera

           && (UIDeviceOrientationIsLandscape([[UIDevice currentDevice]orientation]))) {

           

           imagePicker.cameraViewTransform = CGAffineTransformMakeRotation(M_PI/2);

 

        }

 [popover presentPopoverFromRect: CGRectMake(vwPopover.frame.origin.x, vwPopover.frame.origin.y, vwPopover.size.width, 0)

        inView:self.view

              permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

⋯⋯

这下终于解决。



你可能感兴趣的:(关于ImagePickerController竖屏显示不正确问题)