6

我正在构建一个应用程序,我需要在其中截取其子视图是相机会话(AVFoundation 会话)的视图。我试过这段代码:

CGRect rect = [self.containerView bounds];
UIGraphicsBeginImageContextWithOptions(rect.size,YES,0.0f);
CGContextRef context = UIGraphicsGetCurrentContext();
[self.containerView.layer renderInContext:context];
UIImage *capturedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

这有效地为我提供了一个带有视图的 UIImage,只是相机会话是黑色的:

在此处输入图像描述

我已经尝试过私有方法UIGetScreenImage()并且效果很好,但是由于Apple不允许这样做,所以我不能使用它。我也尝试过Apple 文档中的那个,但它是一样的。我已经使用层将问题跟踪到 AVFoundation 会话。我怎样才能做到这一点?该应用程序有一个容器视图,其中有两个视图是停止的相机会话。

4

2 回答 2

2

如果使用 iOS 7,这相当简单,您可以从 UIViewController 执行以下操作:

UIView *snapshotView = [self.view snapshotViewAfterScreenUpdates:YES];

您也可以使用寡妇的此链接:iOS:以编程方式制作屏幕截图的最快、最高效的方法是什么?

对于 iOS 6 及更早版本,我只能找到以下 Apple 技术问答:[如何截取包含 UIKit 和 Camera 元素的应用程序的屏幕截图?]

  1. 捕获相机视图的内容。
  2. 将捕获的相机内容自己绘制到渲染 UIKit 元素的图形上下文中。(类似于您在代码中所做的)
于 2014-01-02T16:57:14.880 回答
0

我目前也在寻找解决这个问题的方法!

我目前不在,所以我无法测试我发现的内容,但请查看以下链接:

截图 - 获取截图的合法方式 似乎在正确的轨道上 - 这是 示例项目这里是最初的帖子)

当我设法让它工作时,我一定会更新这个答案!

于 2013-04-10T06:05:55.163 回答