Core Animation Architecture
OSXDEV
Core Animation Programming Guide로 이동
코어 애니메이션 레이어와 코코아 뷰 사이에는 확실히 유사한 점이 있지만 개념적으로 가장 큰 차이점은 레이어는 스크린에 직접 렌더하지 않는다는 것이다. NSView는 명백히 모델-뷰-컨트롤러 디자인 패턴에서 뷰를 담당하는데, 레이어는 사실상 모델 오브젝트이다. 레이어는 위치와 타이밍과 시각적인 프라퍼티들을 내포하고 있으며, 디스플레이 될 컨텐트를 제공하고 있지만, 실제 디스플레이 하는 것은 레이어의 책임이 아니다.
모든 보여지는 레이어 트리는 대응하는 두개의 트리에 의해 지원된다 :그림 1에서 보여지는 것 처럼 프리젠테이션 트리와 렌더트리이다.
그림 1. 코어 애니메이션 렌더링 구조
레이어 트리는 각각의 레이어에 대한 오브젝트 모델 값을 포함한다. 그것들은 레이어 프라퍼티에 값을 할당할 때 설정하는 값이다.
프리젠테이션 트리는 애니메이션이 일어날 때 현재 사용자에게 보여지고 있는 값들을 가지고 있다. 예를 들어, 레이어의 backgroundColor에 새로운 값을 설정하면 레이어 트리에서 즉시 변경된다. 그러나, 프리젠테이션 트리의 해당 레이어에 있는 backgroundColor 값은 보간된 컬러들이 사용자에게 디스플레이 되면서 업데이트 된다.
렌더-트리는 레이어를 렌더링 할때 프리젠테이션-트리에 있는 값을 사용한다. 렌더-트리는 합성 작업을 수행할 책임이 있으며 이는 어플리케이션의 활동과는 별개로 이루어진다; 렌더링은 어플리케이션의 런루프에 부담을 최소화 하기 위해 분리된 프로세스 또는 쓰레드에서 수행된다.
애니메이션 트랜젝션이 진행 중일때 CALayer의 인스턴스에 해당 프리젠테이션 레이어를 요청할 수 있다. 이것은 현재의 애니메이션을 변경하고 현재 디스플레이 되고 있는 상태에서 새로운 애니메이션을 시작하려 한다면 가장 유용한 방법이다.





