iOS UIImagePickerController在打开时冻结

时间:2012-10-15 05:39:03

标签: ios ipad uiimagepickercontroller freeze

我目前正在开发一款可在iOS 6中运行的iPad应用

我在我的应用程序中实现了UIImagePickerController的子类,通过覆盖- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation- (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分钟,但它仍然卡住了。

2 个答案:

答案 0 :(得分:2)

我终于找到了问题所在。

在我添加为cameraOverlayView的{​​{1}}的自定义UI视图中,我有自定义的NavigationBar视图。 此视图将其委托设置为UIImagePicker,委托属性使用UIImagePicker

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

@property (nonatomic,assign) id  delegate;

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

答案 1 :(得分:0)

我遇到了这个问题,并且已经为委托提供了一个弱属性(也尝试使用assign),但问题仍然存在。

我发现我的问题是直接指派UIImagePickerController的{​​{1}},如此:

cameraOverlayView

将其更改为以下工作

self.picker.cameraOverlayView = self.overlay;

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

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

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

正如本文所述: Displaying UIImagePickerController within another UIView

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

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