我试图展示一个活的视觉什么是另一个NSView的样子。我应该如何同步两个NSView的渲染内容?
我的问题不是将视图渲染为图像。 cocoa: how to render view to image?
让我们把源代码视图,事件视图和一对多目的地观点,镜像区域。
每个视图都有一个导出和导入CGLayer。
导出图层将使其充当事件视图。
导入图层将使其充当Mirror View。
的想法是,事件视图会施放一个ncdntReflection及其所有镜像区域将赶上反思自己mrrSurface。
- ncdntReflection:事件视图的导出CGLayer。
- mrrSurface:镜像视图的导入CGLayer。
我试过3种方法至今...
1 CGLayer作为后备存储:
- 的事件视图绘制内容及其子视图到ncdntReflection。
- Draw ncdntReflection into Incident View的当前上下文。
- 套装的镜观(S)到ncdntReflection mrrSurface。
2.复合CALayers到CGLayer
- 的事件视图及其子视图绘制后盾CALayers到ncdntReflection。
- 套装的镜观(S)到ncdntReflection mrrSurface。
3 cacheDisplayInRect或CGWindowListCreateImage
- 捕捉使用这两种方法
- 绘制这些内容进入ncdntReflection事件视图的内容。
- 套装的镜观(S)到ncdntReflection mrrSurface。
由于以下原因,我不喜欢这些方法。
Collapsing Layers不是一个选项,因为我需要在每个图层上的动画。这意味着选项1和2都必须递归才能获得所有的子视图。我很担心这种绘图的性能受到影响。
选项3只是太长时间才能成为现场解决方案。
理想既事件视图和镜像区域将遵循同样呈现指令 - 就像一个WPF视觉画笔。
是否有金属解决方案?
金属不能完全帮助你。你看过'NSView' [displayRectIgnoringOpacity:inContext:](https://developer.apple.com/reference/appkit/nsview/1483436-displayrectignoringopacity)方法吗? –
@SilvanMosberger这正是我需要的!如果你回答这个问题,我一定会相信你的。 –