我試圖展示一個活的視覺什麼是另一個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這正是我需要的!如果你回答這個問題,我一定會相信你的。 –