Core Animation
- Core Animation은 시각적 요소(visual elements)를 렌더링, 합성하고 애니메이션하는 인프라입니다. (Core Animation은 드로잉 시스템 그 자체가 아님에 주의. Core Animation이 직접 애니메이션을 조작하는게 아니라 실제 드로잉 작업을 하드웨어로 전달합니다.)
- 그래픽 하드웨어에서 직접 조작할 수 있는 비트맵에 뷰의 컨텐츠를 캐싱해 이 동작들을 수행합니다. (CALayer)
- Core Animation은 실제 드로잉 작업을 온보드 그래픽 하드웨어로 전달합니다. (렌더링 작업을 가속화하기위해) -> 그래서 앱의 속도를 저하시키지 않고 높은 프레임속도와 부드러운 애니메이션을 만들 수 있습니다.
- Animation 자체는 다른 Thread에서 작동합니다.
Core Animation Basic
- 대부분의 레이어는 앱에서 실제로 drawing 행동을 하지 않습니다. 대신 레이어는 앱에서 제공하는 컨텐츠를 캡처해 비트맵(backing store라고도 함)으로 캐시합니다.
- Core Animation을 사용하여 view의 위치(position), 크기(size) 또는 불투명도(opacity)에 대한 변경사항에 애니메이션을 적용 할 수 있습니다. 이러한 변경을 수행하면, Core Animation은 프로퍼티의 현재값과 사용자가 지정한 새 값 사이에 애니메이션을 적용합니다.
- 변경으로 인해 애니메이션이 시작되면, 코어 애니메이션은 레이어의 비트맵 및 상태 정보를 그래픽 하드웨어에 전달합니다.
- 그래픽 하드웨어는 (전달받은)새로운 정보를 사용해 비트맵을 렌더링 합니다. 하드웨어에서 비트맵을 관리하면 소프트웨어에서 하는 것보다 훨씬 빠른 애니메이션을 만들 수 있습니다.
- 정적 비트맵을 조작하기 때문에 레이어 기반 드로잉은 기존 뷰 기반 드로잉과 크게 다릅니다. 뷰 기반으로 화면을 그리는 경우 뷰 자체를 변경하면 종종 새롭게 그려진 컨텐츠를 새 파라미터로 drawRect: 메소드를 다시 호출한다. 하지만 이렇게 그리는 건 메인 스레드의 CPU를 사용하기 때문에 비쌉니다. Core Animation은 동일하거나 유사한 효과를 얻기 위해 가능한 한 하드웨어에서 캐시된 비트맵을 조작함으로 이런 비용을 방지합니다.
Layer 객체 (CALayer)
-
Layer객체는 3D space에 구성된 2D surface로, Core Animation으로 하는 모든 작업의 핵심입니다.
-
Layer는 view와 마찬가지로 surface의 geometry, content 그리고 visual 속성(attribute)에 대한 정보를 관리합니다.
-
View와 달리 Layer는 자체 모양(own appearance)을 정의하지 않습니다. 비트맵을 둘러싼 상태정보를 관리하기만 합니다.
-
레이어는 point-based coordinate systems(점 기반 좌표계)와 unit coordinate systems(단위 기반 좌표계)를 모두 사용해 컨텐츠를 배치합니다. 사용되는 좌표계는 전달되는 정보의 유형에 따라 달라집니다.
- 점 기반 좌표는 화면 좌표에 직접 매핑되거나 레이어와 같이 다른 레이어에 의해 상대적으로 지정되어야 하는 값을 지정할 때 사용됩니다.
- 단위 좌표는 다른 값에 상대적이기 때문에 값을 화면 좌표에 묶어두지 않아야 할 때 사용됩니다. 예를 들어 레이어의 anchorPoint 특성은 변경될 수 있는 레이어 자체의 바운드에 상대적인 점을 지정합니다.
- position 특성은 레이어의 중간에 위치합니다. position은 레이어의 anchorPoint 속성을 기반으로 정의가 변경되는 속성 중 하나임. 고정점(anchor point)은 특정 좌표가 시작되는 지점을 나타냅니다.
Layer Trees
CoreAnimation을 사용하는 앱에는 3가지의 레이어 객체가 있다. 각각의 레이어는 앱의 컨텐츠를 화면에 표시하는 데 있어 서로 다른 역할을 한다.
- model layer tree : 애플리케이션과 가장 많이 상호작용 하는 객체. 이 트리의 객체는 애니메이션의 대상 값(target value)을 저장하는 모델 객체임. 레이어의 특성을 변경할 때마다 이 객체 중 하나를 사용함.
- presentation tree : 실행중인 애니메이션의 실행중인 값을 포함하고 있습니다. 레이어 트리 객체는 애니메이션의 대상 값을 포함하는 반면, 프레젠테이션 트리의 객체는 화면에 표시되는 현재 값을 반영함.
이 트리의 객체는 수정이 하면 안되는 대신, 이 객체를 사용해 현재 애니메이션 값을 읽거나 해당 값에서 시작하는 새 애니메이션을 만들 수 있습니다.
- render tree: 실제 애니메이션을 수행하고 Core Animation 전용으로 사용됨
참조 및 출처