gpt4 book ai didi

iphone - 自定义 View 中的 UIImagePickerController 不显示相机

转载 作者:行者123 更新时间:2023-12-03 21:20:18 26 4
gpt4 key购买 nike

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

从理论上讲,它应该开箱即用,但实际上有时会发生这样的情况:如果我关闭自定义 View Controller ,然后“快速”重新打开它,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 实际上是我之前创建的用于放置选择器的 View 。

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

通过查看控制台,似乎选择器(或与其关联的相机资源)实际上在一段时间后被释放,但这只是一个猜测。

有什么线索吗?谢谢

最佳答案

您肯定需要 viewWillAppear 调用,甚至可能还需要更多调用。每当 UIImagePickerController 通过“间接”呈现方法之一呈现时(例如模态呈现,或推送到导航堆栈上),它会自动发送所有适当的显示相关通知:viewWillAppear:、viewDidAppear:、viewWillDisappear: 和viewDidDisappear:.

在内部,UIImagePickerController 使用这些通知来采取适当的初始化操作,例如快门效果。您不知道它如何使用它们,您只需要确保它获取它们即可。

当您通过将其 View 添加为 subview 来直接呈现 UIImagePickerController 时,您就剥夺了它自动接收这些通知的能力。来自 View Controller Programming Guide :

If you incorporate a view controller’s view into your hierarchy by other means (by adding it as a subview to some other view perhaps), the system assumes you want to manage the view yourself and does not send messages to the associated view controller object.

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

关于iphone - 自定义 View 中的 UIImagePickerController 不显示相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5412853/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com