MAC的GPUImage:在GPUImageView上添加子视图

时间:2014-03-31 09:41:50

标签: objective-c macos cocoa opengl gpuimage

我有一个连接到摄像机的GPUImageView对象。 当我添加子视图。子视图显示毫秒,然后消失。 我认为它是由下一个视频帧重绘的!

我在网上搜索没有结果!然后我看了GPUImageView继承:

mac上的GPUImageView继承自NSOpenGLView,所以我寻找如何在NSOpenGLView上添加子视图。 Apple提供了如何执行此操作的示例,它在此处称为LayerBackedOpenGLView链接:https://developer.apple.com/library/mac/samplecode/LayerBackedOpenGLView/Introduction/Intro.html

他们使用: [openGLView setWantsLayer:YES];  这使得subview apear但是在GPUImageView(来自摄像头的视频流)中消失了,并且变得有些混乱。

Apple提到:

启用NSOpenGLView的“wantsLayer”属性可激活图层支持的渲染 OpenGL视图。图层支持的渲染模式使用自己的NSOpenGLContext,它与之不同 视图用于在非图层支持模式下绘制的NSOpenGLContext。 AppKit,在工作 与CoreAnimation的Concert,自动创建此上下文并将其分配给视图。

我是Mac上的新手,不知道OpenGL,所以也许我做错了什么或错过了什么。我需要一种在GPUImageView上添加子视图的方法。

我的问题是:  如何在GPUImageView对象(在MAC上)添加子视图,条件是:

  • 子视图必须可见
  • 内容也必须显示。 (在我的案例中,GPUImageView上显示的视频流)

1 个答案:

答案 0 :(得分:0)

添加图层与添加子视图不同。如果要在GPUImageView上显示某些内容,则需要使用方法-addSublayer(在GPUImageView的原始图层上调用)向GPUImageView添加图层,然后将其他内容绘制到此图层。

要显示视频供稿,如果您的视频来自AVCapture,则可以使用预先制作的AVCaptureVidoPreviewLayer

另一种解决方案是让您的视频Feed和GPUImageView属于同一个超级视图,然后在超级视图中处理两个视图的布局。