CALayer를 공부하다 보니 Core Animation에 대한 배경지식도 알고 있어야 할 것 같아서 쓰는 글이다.
아래는 Core Animation 공식 문서의 개요 부분을 간단히 정리해 보았다.
Core Animation?
Core Animation은 iOS와 OS X에서 사용할 수 있는 그래픽 렌더링 및 애니메이션 인프라로, 앱 내의 view 및 기타 시각적 요소를 animate 하는 데 사용한다.
Core Animation을 사용하면 애니메이션 각각의 프레임을 짜는데 필요한 대부분의 작업이 자동으로 수행된다. 몇 가지 animation 매개변수를 구성하고(ex. 시작 지점 및 끝나는 지점) 시작하도록 지시만 하면 된다.
대부분의 실제 그리기 작업은 렌더링 가속화를 위해 메인 보드에 부착되어 있는 그래픽 하드웨어로 넘겨준다.
이 자동화된 그래픽 가속은 CPU에 무리를 주거나, 앱 속도를 늦추지 않으면서 높은 프레임 속도와 부드러운 애니메이션을 가능하게 한다.
위 그림과 같이 Core Animation은 AppKit 및 UIKit 아래에 있으며 Cocoa Touch의 view 처리 과정과 강력하게 결합되어 있다.
한눈에 Core Animation 살펴보기
1. Core Animation은 앱 콘텐츠를 관리한다
Core Animation 그 자체로는 무언가를 그리는 시스템이 아님 (=그리는 것은 하드웨어)
하드웨어에서 앱의 콘텐츠를 합성하고 조작하기 위한 인프라이다.
이 인프라의 핵심으로, 콘텐츠를 관리하고 조작하기 위한 레이어 오브젝트(CALayer)가 있다.
레이어는 콘텐츠를 그래픽 하드웨어에서 쉽게 조작할 수 있게 비트맵으로 캡처하는 작업을 한다.
대부분의 앱에서 레이어는 뷰의 콘텐츠를 관리하는 방법으로 사용되지만, 필요에 따라 별도의 레이어를 만들 수도 있다.
2. 레이어를 수정하면 애니메이션이 발생한다
Core animation을 사용하여 생성하는 대부분의 애니메이션은 레이어 속성 변경과 관련이 있다.
view와 마찬가지로 레이어 오브젝트 또한 투명도, 경계 사각형, 화면 상의 위치, 불투명도, 변형 및 수정할 수 있는 기타 여러 시각적 지향 속성이 있다. 이러한 속성 중 대부분은 속성 값을 변경하는 것만으로도 암시적 애니메이션이 발생하게 된다.
이 애니메이션은 레이어의 속성 값이 변경 전 값에서 변경 후 값으로 변경되면서 동작하는 것이다.
3. 레이어는 계층적이다.
레이어들 사이에서는 부모-자식 관계가 생성되며 계층적으로 구성된다.
이 레이어들의 정렬은 view와 유사한 방식으로 시각적 콘텐츠에 영향을 준다.
(=상위 계층의 레이어는 하위 계층 레이어보다 아래에 표시되는 방식으로 뷰와 유사함)
뷰에 붙어있는 레이어들의 계층구조는 그 뷰들의 계층 구조와 동일하다.
또한 이 레이어 계층에는 view와 관계없이 별도의 레이어를 생성하여 추가할 수도 있다.
UIView와 레이어의 관계 정리
- UIView는 layer 프로퍼티를 가지고 있다.
- layer 프로퍼티는 layerClass 타입 프로퍼티에 의해 어떤 레이어가 만들어질지 결정된다.
- UIView는 CALayerDelegate를 채택하고 있다.
- 채택한 Delegate의 display나 draw 메서드가 화면을 보여주는 시점에 호출된다.
- 이 메서드가 호출되면 화면에 보여줄 콘텐츠를 layer에 제공한다.
- layer는 이 콘텐츠를 비트맵으로 캐싱해서 가지고 있는다.
- 뷰가 다시 그려지거나, 애니메이션을 시작하면 Core animation은 저장된 비트맵과 변경된 상태 값을 하드웨어로 넘겨준다.
- 하드웨어는 이걸 받아서 새로운 비트맵을 만든다.
참고
'Study > iOS' 카테고리의 다른 글
[iOS] CALayer (0) | 2022.07.14 |
---|---|
[iOS] UITextView에 링크 거는 법 (0) | 2021.03.22 |
[iOS] UITextView와 UITextField의 차이 정리 (2) | 2021.03.17 |
[iOS] 뷰 생명주기(View life cycle)에 대해서 알아보자 (1) | 2021.03.07 |
[iOS] 앱 생명주기(App life cycle)에 대해서 알아보자 (3) | 2021.03.05 |