【问题标题】:Displaying UIImagePickerController within another UIView在另一个 UIView 中显示 UIImagePickerController
【发布时间】:2009-11-18 21:25:54
【问题描述】:

在过去的几个月里,我一直在广泛地使用 UIImagePickerController,尤其是在 OS3.1 和更新的新功能中,可以在相机视图上叠加视图。这工作得很好。

但是,我目前正在开展一个项目,希望能够在现有视图中显示 UIImagePickerController 的相机视图。本质上,与我目前所做的完全相反。

一个例子是一个带有导航组件的视图控制器(想想带有渐变的顶部和底部水平条),当点击这些条之一上的按钮时,内容区域会显示相机视图。快门动画应该会向上,并且顶部和底部的导航栏将始终保持在顶部。

我已经成功地将 UIImagePickerController 添加到窗口视图中,并以模态方式显示它,但没有任何运气将它添加为子视图。

例如:

[window addSubview:camera.view];
[self presentModalViewController:camera animated:YES];

【问题讨论】:

  • 来自文档:“重要提示:UIImagePickerController 类仅支持纵向模式。此类旨在按原样使用,不支持子类化。此类的视图层次结构是私有的,不得修改”就这么简单。
  • 只是presentViewController,不要使用modal。所以,[self presentViewController:ipc animated:YES completion:NULL];

标签: iphone objective-c cocoa-touch uiimagepickercontroller


【解决方案1】:

您需要做的就是调用 viewWillAppear 和 viewDidAppear。

这是一个例子,其中 _pickerController 是 UIImagePickerController 的一个实例:

[self.view addSubview:_pickerController.view];
[_pickerController viewWillAppear:YES];
[_pickerController viewDidAppear:YES];

【讨论】:

  • 这让我可以将相机显示为任何视图的子视图(镜头打开,一切正常)。但是,带有时钟、电池指示灯等的顶部条消失并变成白色条。我猜 UIImagePickerController 不打算在显示顶栏时使用。
  • 不确定。我总是删除状态栏。
  • 谢谢。我刚刚添加了 [self.pickerForProfilePicture.view removeFromSuperview];
【解决方案2】:

将视图添加到您的视图后,在图像选择器控制器上调用 viewWillAppear:YES。跳过模态视图控制器业务。

【讨论】:

  • 刚刚尝试过,相机视图显示,但镜头没有打开。它只是在镜头关闭的情况下停留在该图形上。不确定这是否仍然是一个相关问题。这就是我所做的: [self.view addSubview:camera.view]; [camera viewWillAppear:YES];
【解决方案3】:

我不认为 API 提供对UIImagePickerController 实际视图的直接访问。该类实际上是UINavigationController 的子类,所以我认为它本身并没有实际的视图,而是管理其子控制器及其视图的调用。

当您以模态方式调用UIImagePickerController 时,它不会将其控制的视图作为子视图添加到窗口(或任何其他视图)。这就是模态视图的含义。它将视图呈现到视图层次结构的“一侧”。

即使你们可以一起破解,我认为 Apple 会拒绝它,因为它不是 API 的一部分并且违反了 HIG。

【讨论】:

  • UIImagePickerController 是 UIViewController 的子类,它有一个 view 属性,所以应该可以将该 view 属性用作另一个 UIView 的子视图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多