[ios/reference] Setting Up Layer Objects
-
iOS 앱에서 Core Animation 은 항상 enable 되어 있고, 모든 view 는 layer 가 backed 되어 있다.
OS X 는 Core Animation 을 명시적으로 enable 시켜야 한다.
-
Layer-backed view 는 CALayer 를 기본으로 만든다.
그러나 상황에 따라 다른 Layer 를 설정할 수 있다.
다른 Layer 를 사용하는 이유는, performance 를 향상시키거나, 더 간단한 방법으로 작업을 할 수 있기 때문이다.
예를 들어 CATiledLayer 는 큰 이미지를 표시하는 데 효율적이다.
-
UIView 를 extends 하고, layerClass method 를 overriding 하여 layer class 를 바꿀 수 있다.
-
Layer Class 를 바꾸는 또 다른 예는...
Metal 을 이용하여 draw 하는 경우 CAMetalLayer 를...
OpenGL 을 사용하여 draw 하는 경우는 CAEAGLLayer 를 사용한다.
특정 상황에서 더 좋은 performance 를 내는 layer 도 있다.
-
Layer 클래스들은...
CAEmitterLayer
Core Animation 기반 particle emitter system 에 사용하기 좋다.
CAGradientLayer
gradient 를 그리기에 좋다.
CAMetalLayer
CAEAGLLayer/CAOpenGLLayer(OSX)
CAReplicatorLayer
한개 이상의 sublayer 를 copy 하기 위해 사용된다.
CAScrollLayer
sub layer 들을 크게 스크롤하는 경우에 사용
CAShapeLayer
cubic Bezier spline 을 그릴 때 사용된다.
CATextLayer
text 그릴 때 사용된다.
CATiledLayer
큰 이미지를 작은 타일 형태로 만들어 그릴 때 사용된다.
zoom 도 지원된다.
CATransformLayer
3D layer hierarchy 를 rendering 하기 위해 사용된다.
QCCompositionLayer ( OS X )
-
Layer 에 content 를 설정하는 방법은 3가지가 있다.
contents property 에 바로 image 를 assign 한다. ( 변경이 적은 contents 를 설정하는 최적의 방법 )
layer 에 delegate 를 설정하고 delegate 가 content 를 그리도록 한다. ( 주기적으로 바뀌는 경우 최적 )
layer 의 subclass 를 만들고 override 하여 content 를 직접 그린다.
-
Layer 에 전달하는 image 는 ( contents property 를 통해 ) CGImageRef type 이어야 한다.
-
Layer 에 image 를 전달한 경우 contentsGravity property 를 통해 해당 이미지가 bounds 안에서 어떻게 표시될지를 정해야 한다.
기본값은 bounds 에 맞도록 scale 하여 fit 시키는 것이다.
두 가지 측면에서 값을 지정한다.
하나는 position-based, 하나는 scaling-based
kCAGravity 값을 지정해준다. ( ex) kCAGravityTopLeft, kCAGravityResizeAspect )
-
High resolution image 를 다룰 때에는 contentsScale 값을 적당히 넣어주는 것이 좋다.
기본값은 1.0 이다.
레티나를 위한 display 라면 2.0 을 넣어준다.
아 값은 image 를 직접 지정해 준 경우에 valid 하다.
'프로그래밍 놀이터 > iOS' 카테고리의 다른 글
[ios/reference] Improving Animation Performance (0) | 2017.11.23 |
---|---|
[ios/reference] Animating Layer Content (0) | 2017.11.22 |
[ios/reference] Core Animation Basics (0) | 2017.11.20 |
[ios/reference] Core Animation (0) | 2017.11.19 |
[ios/tutorial] Flip Left/Right, & Curl Up/Down Animation (0) | 2017.11.18 |
댓글