用过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,相机镜头却显示正常:
在网上没有搜到类似的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];
⋯⋯
这下终于解决。