自定义视图中的UIImagePickerController不显示摄像头

时间:2011-03-23 23:14:56

标签: iphone camera uiimagepickercontroller

我正在尝试在自定义视图中显示相机的内容。我只想实现自定义按钮拍照,以便一次拍摄多张照片。

理论上它应该开箱即用,但在实践中有时会发生如果我解除我的自定义视图控制器然后“快速”重新打开它,UIImagePickerController只显示一个空白(实际上是黑色)内容。有趣的是,如果您尝试拍照,相机实际上已启用并且快门打开,您可以收集图像。唯一的问题似乎与将实况内容显示到特定的UIView有关。

这是我用来显示它的代码:

UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];

[imagePickerController setSourceType:UIImagePickerControllerSourceTypeCamera];
[imagePickerController setShowsCameraControls:NO];
[imagePickerController setEditing:NO];
[imagePickerController setNavigationBarHidden:YES];

[imagePickerView addSubview:[imagePickerController view]];
[imagePickerController viewWillAppear:YES];

我不喜欢viewWillAppear方法调用,但这是我发现它的唯一方法。 imagePickerView确实是我之前创建的用于放置选择器的视图。

通过自己挖掘一点问题,我注意到如果我在重新打开自定义视图控制器之前等待几秒钟,则选择器会正常显示。

通过查看控制台,看起来拾取器(或与之关联的相机资源)实际上在一段时间后才会释放,但这只是猜测。

有任何线索吗?感谢

1 个答案:

答案 0 :(得分:1)

你肯定需要viewWillAppear调用,可能还需要更多。每当UIImagePickerController由一个“间接”表示方法(如模式表示或被推送到导航堆栈)呈现时,它会自动发送所有相应的显示相关通知:viewWillAppear:,viewDidAppear:,viewWillDisappear:和viewDidDisappear:

内部UIImagePickerController使用这些通知进行适当的初始化操作,如快门效果。你不知道它是如何使用它们的,你必须确保它能得到它们。

当您通过将UIImagePickerController的视图添加为子视图来直接呈现UIImagePickerController时,您将无法自动接收这些通知。来自View Controller Programming Guide

  

如果您合并了一个视图   控制器对您的层次结构的看法   通过其他方式(通过添加它作为   也许是其他观点的子视图),   系统假定您要管理   你自己的观点,不发送   消息到相关视图   控制器对象。

这不一定是坏事,只是意味着你需要自己承担这些信息的责任。我没有看到你在显示选择器时遇到的这个确切问题,但我第一次尝试修复将是确保在适当的时间将这4个显示相关通知中的每一个发送到选择器控制器,尤其是消失的,如果你还没有这样做的话。