关于ImagePickerController竖屏显示不正确问题
2012-03-02 10:06
323 查看
用过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度(如下图所示)。
![](http://img5.ph.126.net/SG7CvJ5D_sGW00Ki0yQ3XQ==/5717524236109628915.jpg)
但当我关闭屏幕(确定需要关屏),将屏幕旋转至横屏,再次弹出ImagePickerController,相机镜头却显示正常:
![](http://img2.ph.126.net/RYgcyEhnPvwn9neYgqmy0g==/1297036692699995832.jpg)
在网上没有搜到类似的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];
⋯⋯
这下终于解决。
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度(如下图所示)。
![](http://img5.ph.126.net/SG7CvJ5D_sGW00Ki0yQ3XQ==/5717524236109628915.jpg)
但当我关闭屏幕(确定需要关屏),将屏幕旋转至横屏,再次弹出ImagePickerController,相机镜头却显示正常:
![](http://img2.ph.126.net/RYgcyEhnPvwn9neYgqmy0g==/1297036692699995832.jpg)
在网上没有搜到类似的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];
⋯⋯
这下终于解决。
相关文章推荐
- 关于ubuntu系统启动时显示.dmrc权限不正确的问题的解决
- 关于windbg不能正确显示KeServiceDescriptorTableShadow的问题
- 关于在IE-8下 button的背景图片不能正确显示的问题
- CurrentCulture and UICulture解决关于全球的的日期格式都能插入数据库和一些如果¥,$的正确显示问题...
- 关于在Vista下资源中的程序大图标(128*128, 256*256)无法正确显示的问题
- 关于在IE-8下 button的背景图片不能正确显示的问题
- 关于附加码不能正确显示的问题
- 关于苹果手机页面中字体大小显示不正确的问题
- 关于opencv在代码正确的情况下,无法显示图像的问题。
- 关于Java的API无法正确显示的问题
- 关于博客无法正确显示后台信息的问题
- 关于6.0ScrollView嵌套RecyclerView高度不正确显示不全问题解决办法
- 关于eclipse GIT中提交时author和commiter显示(Administrator)不正确的问题解决方案
- 关于 Fragment内嵌套Fragment 切换显示不正确的问题。
- 关于github中无法正确显示的问题解决
- 关于[datePicker date]不正确显示当地时间的问题
- java生成可执行文件方法及关于图片正确显示的问题
- 关于可执行程序 执行后 弹出“兼容性助手” 和 cef 客户端 titel无法显示的问题。
- 关于html中使用img标签显示图片问题
- 关于前端JSP显示的一些问题