라이브 뷰어을 다른 NSView의 모습으로 표시하려고합니다.두 NSView의 렌더링 된 내용을 어떻게 동기화해야합니까?
내 문제 은 (는)이 아니므로보기를 이미지로 렌더링하지 않습니다.
cocoa: how to render view to image?은의 소스보기, 사건보기, 많은 대상 뷰에 하나, 거울보기를 부르 자.
모든보기에는 내보내기 및 가져 오기 CGLayer가 있습니다.
내보내기 계층은 인시던트보기의 역할을합니다.
가져 오기 레이어는 미러보기의 역할을합니다.
아이디어는 사건보기가 mrrSurface에 그 반사를 잡을 것 ncdntReflection과 거울보기의 모든 캐스팅 것입니다.
- ncdntReflection : 사고 뷰의 수출 CGLayer.
- mrrSurface : 미러보기의 가져 오기 CGLayer.
나는 백업 저장소로 지금까지 3 개 방식 ...
1 CGLayer 시도했다 : 사건보기의
- 그리기 내용과 파단에를 ncdntReflection.
- 그리기 ncdntReflection into 인시던트보기의 현재 컨텍스트.
- 설정 거울보기 (들) ncdntReflection의 mrrSurface. CGLayer에
2. 복합 CALayers
- ncdntReflection에 사건보기와 서브 뷰의 그리기 백업 CALayers.
- 설정 거울보기 (들) ncdntReflection의 mrrSurface.
3. cacheDisplayInRect 또는 CGWindowListCreateImage
- 캡처
- 이 ncdntReflection에 그 내용을 그리기 방법을 사용하여 사건보기의 내용.
- 설정 거울보기 (들) ncdntReflection의 mrrSurface.
다음과 같은 이유로 이러한 접근 방식이 마음에 들지 않았습니다.
레이어 축소는 각 레이어마다 애니메이션이 필요하기 때문에 옵션이 아닙니다. 즉, 모든 하위 뷰를 가져 오기 위해서는 옵션 1과 2 모두 재귀 적이어야합니다. 이런 종류의 드로잉에서 성능이 떨어질 까봐 걱정됩니다.
옵션 3은 실제 솔루션으로는 너무 오래 걸립니다. WPF 비주얼 브러쉬와 같은 -
이상적으로 모두 사건보기 및 거울보기 같은 렌더링 지침을 따를 것입니다.
금속 용액이 있습니까?
금속이 전혀 도움이되지 못합니다. NSView의 [displayRectIgnoringOpacity : inContext :] (https://developer.apple.com/reference/appkit/nsview/1483436-displayrectignignoringopacity) 메소드를 보셨습니까? –
@SilvanMosberger 그게 내가 필요한 것입니다! 당신이 질문에 대답하면 나는 당신에게 그것을 신용해야합니다. –