프로그래밍 놀이터/iOS

[ios/reference] Setting Up Layer Objects

돼지왕 왕돼지 2017. 11. 21. 08:30
반응형

 [ios/reference] Setting Up Layer Objects


https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreAnimation_guide/SettingUpLayerObjects/SettingUpLayerObjects.html#//apple_ref/doc/uid/TP40004514-CH13-SW12


-

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 하다.




반응형