2011-11-19 2 views
3

스크롤보기에 포함 된 사용자 정의 (레이어 호스팅) 문서보기를 만들고 있습니다. 루트 레이어에는 동일한 크기의 하위 레이어가 두 개 있습니다. 하나는보기의 내용 용이고 다른 하나는 주 내용 위로 마우스를 가져 가야합니다. 프레임을 2500x2500으로 설정하고 콘텐츠 레이어에 여러 셀을 추가했습니다. 괜찮 았습니다. 오버레이 레이어에 셀 레이어 중 하나의 반투명 클론을 추가하면 전체보기가 잠시 사라지고 '코어 애니메이션 : 표면 2502x2502가 너무 큽니다'라는 로그 메시지가 나타납니다. 이것은 새 레이어와 이벤트 루프의 다음 사이클을 추가하는 사이에 발생하므로 코어 애니메이션이 새 레이어를 렌더링 할 때 추측됩니다."CoreAnimation : 표면이 너무 큽니다."

레이어의 콘텐츠 크기가 OpenGL 텍스처 크기와 관련되어 있음을 알았지 만 프레임이 중요하다고 생각하지 않았습니다. 이 레이어에 아무 것도 그리지 않고 스타일 속성을 설정하지 않고 오프 스크린 하위 레이어를 제거합니다. 내가 실제로 사용하고있는 것은 문서보기의 기하학을 처리하는 것입니다. 이것은 CA 레이어를 적절하게 사용합니까? 그렇지 않은 경우 큰 핵심 애니메이션 기반 문서 뷰를 처리하는 더 나은 방법이 있습니까?

편집 : 나는 다시이 문제를 가지고 큰 부모에게 서브 레이어를 추가하는 방법에 대한 암시 적 애니메이션에 의해 발생했습니다

. 그래서 아래에 제안 된 것 이외에, 당신이 이것에 부딪쳤을 때 확인하는 것이 하나 있습니다.

답변

1

2500x2500 레이어에서 화면 외부 렌더링이 필요할 수있는 속성을 설정하지 않았는지 확인합니다. 이렇게하면 레이어가 전체 크기의 버퍼를 화면에 표시하고 내용을 화면에 직접 렌더링하는 것이 아니라 해당 버퍼에 내용을 렌더링합니다.

예를 들어 불투명도, masksToBounds, mask, shouldRasterize 등이 화면 렌더링을 유발할 수 있습니다. 코어 애니메이션 도구로 오프 스크린 렌더링이 발생하는지 확인할 수 있습니다. 오프 스크린 렌더링 영역을 강조 표시하는 확인란이 있습니다.

+0

좋은 제안이지만 Core Animation 악기는 iOS 전용 인 것 같습니다. 예를 들어 레이어에서 메서드를 호출하거나 오프 스크린 렌더링을 트리거하는 어딘가에 속성 목록을 호출하여 오프 스크린 렌더링을 확인하는 방법이 있습니까? (이 문서에서 아무것도 볼 수 없다) –

+0

아, 죄송합니다, 내 두뇌는 임의의 이유로 iOS 모드였습니다. 상위 뷰에 대해 NSView를 사용할 수없는 이유는 무엇입니까? –

+0

그것이 실제로 도움이 될지 확실하지 않다고해야합니다. 필자는 CALayers를 Cocoa에서 사용하기가 매우 어려웠고 가능한 경우 뷰 계층의 잎에만 사용하려고했습니다. –

관련 문제