1

我有一个非常奇怪的行为:

  1. 在 iOS 5 中,我UIImagePickerController以这种方式呈现:

imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; imagePicker.modalPresentationStyle = UIModalPresentationFullScreen; imagePicker.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

[self presentModalViewController:imagePicker animated:YES];

现在在 iOS 6 中,这会导致崩溃。我通过在以下位置编写类别解决了崩溃UIImagePickerController

@implementation UIImagePickerController (NonRotating)

- (BOOL)shouldAutorotate
{
    return NO;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationMaskPortrait;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAll;
}

@end

问题是现在UIImagePickerController不旋转并且它显示在上方。此外,当我按下“取消”按钮并且选择器被关闭时,应用程序再次崩溃。

  1. 如果我使用UIImagePickerController内部 a UIPopoverController,一切正常(属于弹出框不旋转的事实)但是当我关闭弹出框时,我的应用程序中的所有视图控制器停止响应旋转事件,这导致所有应用程序都被阻止在此方向。要恢复正确的行为,我需要从后台退出应用程序并再次打开。

这是我用来显示弹出框的代码

_cameraPopoverController = [[UIPopoverController alloc] initWithContentViewController:imagePicker];
[_cameraPopoverController presentPopoverFromRect:_takeFromCamera.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

这个问题把我逼疯了!

4

2 回答 2

0

虽然我不建议使用类别来覆盖图像选择器的默认行为,但在实现中存在一个导致上述崩溃的错误:

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationMaskPortrait;
                                 ~~~~
}

返回值不应该是一个方向掩码,它应该是一个方向,例如 UIInterfaceOrientationPortrait。

于 2013-04-23T06:26:35.457 回答
0

你的选择器源类型是什么?照片库/相册或相机胶卷?

假设您使用的是照片库/相册源,在 iPad 上,您必须使用弹出框:

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIImagePickerController_Class/UIImagePickerController/UIImagePickerController.html(查看概述,第 4 点)

不支持全屏显示。

关于另一个问题(关闭 popOver 后,其他 VC 停止旋转)检查您是否有对您的 popover 的 STRONG 引用(强属性)。粘贴您用于呈现弹出框的代码。

于 2013-01-17T16:39:55.790 回答