2

我目前正在开发一个在 iOS 6 中运行的 iPad 应用程序

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation我在我的应用程序中实现了 UIImagePickerController 的一个子类,它通过覆盖and- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window函数来强制相机处于横向。

似乎有一个随机的机会,通过presentViewController它启动图像选择器时会被相机“加载”屏幕捕获。那个看起来像一个关闭的相机快门。除非您退出或锁定/解锁屏幕,否则应用程序将在此屏幕上冻结,之后它将正常运行。

我还有一个用于相机视图的自定义 UI。但是我在添加之前就注意到了这个问题,所以我认为这无关紧要。

这是我必须打开选择器的内容:

if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
    self.modalController = [[CameraLandscapeImagePicker alloc] init];
    self.modalController.delegate = self;
    self.modalController.sourceType = UIImagePickerControllerSourceTypeCamera;
    self.modalController.mediaTypes = [NSArray arrayWithObjects:(NSString *) kUTTypeImage, nil];
    self.modalController.allowsEditing = NO;
    [self.viewController presentViewController:modalController animated:YES completion:nil];

    //add the overlaying view ui
    [self.modalController buildCustomOverlay];

    self.newMedia = YES;
}

任何帮助表示赞赏。

[编辑] - 更新:我已经设法弄清楚如何故意复制这个问题。下面是步骤:

  • 点击我的应用程序“捕获”按钮以加载相机
  • 退出相机界面
  • 按下 ipad 上的主页按钮
  • 通过点击主屏幕上的图标再次打开应用程序
  • 再次点击我的应用程序“捕获”按钮
  • 相机在快门屏幕上冻结

我还注意到即使连接到 xcode 也会发生这种情况。

我已经修改了我的代码,以便通过单例提供 UIImagePickerController 对象。以前我每次都创建一个新的 UIImagePickerController 对象。这没有任何影响,我仍然遇到同样的问题。我已经让应用程序在快门屏幕上运行了大约 5 分钟,但它仍然卡住了。

4

2 回答 2

2

我终于弄清楚了问题所在。

在我添加的自定义 UI 视图中,cameraOverlayViewUIImagePicker有一个自定义 NavigationBar 视图。此视图将其委托设置为 UIImagePicker 并使用委托属性retain

最后,它是一个从“保留”到“分配”的单词更改来修复它:

@property (nonatomic,assign) id 委托;

如果您遇到与此类似的问题,我建议您将自定义 ui 代码的部分注释掉,以查看究竟是什么导致了问题。

于 2012-10-22T06:45:58.440 回答
0

我遇到了这个问题,并且委托的属性已经很弱(也尝试使用分配),但问题仍然存在。

我发现我的问题是直接分配UIImagePickerController'cameraOverlayView像这样:

self.picker.cameraOverlayView = self.overlay;

将其更改为以下有效

[self.picker.cameraOverlayView addSubview:self.overlay];

我在 Apple 示例应用程序中找到了解决方案:

http://developer.apple.com/library/ios/#samplecode/PhotoPicker/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010196-Intro-DontLinkElementID_2

编辑经过进一步测试,我发现这实际上是不够的。

正如这篇文章中所建议的: 在另一个 UIView 中显示 UIImagePickerController

我添加了以下内容以使快门动画“打开”:

[self.picker viewWillAppear:YES];
[self presentViewController:self.picker animated:NO completion:nil];
[self.picker viewDidAppear:YES];
于 2013-04-16T15:14:48.490 回答