2011-03-23 83 views
2

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

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

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

你绝对需要这个viewWillAppear调用,可能更多。每当UIImagePickerController由“间接”呈现方法之一(如模式呈现或被推入导航堆栈)呈现时,它会自动发送所有适当的与显示相关的通知:viewWillAppear:,viewDidAppear:,viewWillDisappear :, viewDidDisappear :.

内部UIImagePickerController使用这些通知来采取适当的初始化操作,如快门效果。你不知道它是如何使用它们的,你只需要确定它得到它们。

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

如果您将视图 控制器的视图到您的层次 通过其他方式(可以将其作为一个 子视图其他一些观点也许), 系统假定要管理 的查看自己并且不会将 消息发送到关联的视图 控制器对象。

这并不一定是坏的,它只是意味着你需要为自己承担这些信息的责任。我还没有看到显示选取器的确切问题,但我第一次尝试解决问题的方法是确保在适当的时候将这4个与显示相关的通知中的每一个都发送给选取器控制器,尤其是如果你还没有这样做,那么消失的人就会消失。

+0

你说得对。我做的和你的建议完全一样,它现在像一个魅力。谢谢! – 2011-03-24 13:07:47

+0

HI法比亚诺,请分享您在addSubview之后处理的其他视图相关通知。我遇到类似的问题,并在控制台上发出警告 - “忽略拍照请求;相机尚未准备就绪。” – 2012-09-10 17:22:17

相关问题