# CALayer

> 원문 출처\
> <https://developer.apple.com/documentation/quartzcore/calayer>

## Summary

> **SDKs**
>
> * iOS 2.0+
> * macOS 10.5+
> * tvOS 9.0+
> * Mac Catalyst 13.0+
>
> **Framework**
>
> * Core Animation

## Declaration

{% tabs %}
{% tab title="Swift" %}

```swift
class CALayer : NSObject
```

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
@interface CALayer : NSObject
```

{% endtab %}
{% endtabs %}

## 개요 <a href="#overview" id="overview"></a>

레이어는 종종 뷰에 대한 백업 저장소를 제공하는데 사용되기도 하지만 컨텐츠를 표시할 뷰 없이도 사용될 수 있습니다. 레이어의의 기본 작업은 개발자가 제공하는 시각적 컨텐츠를 관리하는 것이지만 레이어 자체에는 배경색, 테두리 및 그림자 같은 시각적 속성이 설정되어 있습니다. 시각적 컨텐츠 관리 외에도, 레이어는 해당 컨텐츠를 화면에 표시하는데 사용되는 컨텐츠의 형태(위치, 크기 및 변환 등)에 대한 정보도 보유합니다. 레이어 프로퍼티를 수정함으로써 레이어의 컨텐츠나 지오메트리 상의 에니메이션을 시작할 수 있습니다. 레이어 객체는 레이어의 타이밍 정보를 정의하는 [CAMediaTiming](/sagwa/etc/not-found.md) 프로토콜을 채택하여 레이어와 애니메이션의 지속 시간과 페이싱을 캡슐화합니다.

레이어 객체가 뷰에 의해 생성된 경우 일반적으로 뷰는 자신을 레이어의 delegate로 자동 할당하는데 해당 관계는 변경되어선 안됩니다. 직접 작성하는 레이어의 경우 delegate 객체를 할당하고 해당 객체를 사용하여 레이어의 컨텐츠를 동적으로 제공하며 다른 작업도 수행할 수 있습니다. 또한 레이어에는 하위 뷰의 레이아웃을 별도로 관리하기 위한 레이아웃 관리자 객체가 있을 수 있습니다(LayoutManager 프로퍼티에 할당됨)

## 주제 <a href="#topics" id="topics"></a>

### 레이어 생성 <a href="#creating-a-layer" id="creating-a-layer"></a>

* init()

  초기화된 CALayer 객체를 반환합니다.
* init(layer: Any)

  지정된 레이어의 커스텀 필드를 복사하거나 초기화하기 위해 오버라이드합니다.
* &#x20;init(remoteClientId: UInt32)

  remote client ID로 레이어를 초기화합니다.

### 연관 레이어 객체에 접근하기 <a href="#accessing-related-layer-objects" id="accessing-related-layer-objects"></a>

* *func* presentation() -> Self?\
  현재 화면에 표시되는 레이어 상태를 나타내는 프레젠테이션 레이어 객체의 복사본을 반환합니다.
* *func* model() -> Self

  수신자와 연결된 모델 레이어 객체가 있는 경우 반환합니다.

### Delegate에 접근하기 <a href="#accessing-the-delegate" id="accessing-the-delegate"></a>

* *var* delegate: CALayerDelegate?

  레이어의 delegate 객체

### 레이어 컨텐츠 제공 <a href="#providing-the-layers-content" id="providing-the-layers-content"></a>

* *var* contents: Any?

  레이어의 컨텐츠를 제공하는 객체입니다. 애니메이션 가능합니다.
* *var* contentsRect: CGRect

  단위 좌표 공간에서 사용되어야하는 레이어의 컨텐츠 부분을 정의하는 사각형. 애니메이션 가능합니다.
* *var* contentsCenter: CGRect\
  레이어 컨텐츠의 크기가 조절되었을때 레이어 컨텐츠의 크기가 조정되는 방법을 정의하는 사각형. 애니메이션 가능합니다.
* *func* display()

  이 레이어의 컨텐츠를 다시 로드합니다.
* *func* draw(in: CGContext)

  지정된 그래픽 컨텍스트를 사용하여 레이어의 컨텐츠를 그립니다.

### 레이어 모양 수정 <a href="#modifying-the-layers-appearance" id="modifying-the-layers-appearance"></a>

* *var* contentsGravity: CALayerContentsGravity

  레이어 컨텐츠가 bound(경계) 내에서 배치되거나 스케일되는 방법을 지정하는 상수
* Contents Gravity Values\
  Contents Gravity 상수는 레이어의 bound가 컨텐츠 객체의 bound보다 클 때 컨텐츠 객체의 위치를 지정합니다. [contentsGravity](/sagwa/etc/not-found.md) 프로퍼티에서 사용됩니다.
* *var* opacity: Float

  수신자의 불투명도. 애니메이션 가능합니다.
* *var* isHidden: Bool

  레이어 표시 여부를 나타내는 Boolean 값. 애니메이션 가능합니다.
* *var* masksToBounds: Bool

  레이어의 bound를 벗어나는 하위 레이어 부분을 잘라내고 표시할 것인지를 나타내는 Boolean 값. 애니메이션 가능합니다.
* *var* mask: CALayer?\
  알파 채널이 레이어 컨텐츠를 마스크하는데 사용되는 선택적 레이어.
* *var* isDoubleSided: Bool

  A Boolean indicating whether the layer displays its content when facing away from the viewer. Animatable.
* *var* cornerRadius: CGFloat\
  둥근 모서리의 레이어를 그릴때 배경에 적용될 반지름. 애니메이션 가능합니다.
* *var* maskedCorners: CACornerMask
* *struct* CACornerMask
* *var* borderWidth: CGFloat

  레이어 테두리의 너비. 애니메이션 가능합니다.
* *var* borderColor: CGColor?\
  레이어 테두리의 색상. 애니메이션 가능합니다.
* *var* backgroundColor: CGColor?\
  수신자의 배경색. 애니메이션 가능합니다.
* *var* shadowOpacity: Float\
  레이어 그림자의 투명도. 애니메이션 가능합니다.
* *var* shadowRadius: CGFloat\
  레이어의 그림자를 렌더링하는 데 사용되는 흐림 반경(point 단위)입니다. 애니메이션 가능합니다.
* *var* shadowOffset: CGSize\
  레이어 그림자의 오프셋(point 단위). 애니메이션 가능합니다.
* *var* shadowColor: CGColor?

  레이어 그림자의 색상. 애니메이션 가능합니다.
* *var* shadowPath: CGPath?\
  레이어 그림자의 모양. 애니메이션 가능합니다.
* *var* style: \[AnyHashable : Any]?\
  레이어에 의해 명시적으로 정의되지 않은 프로퍼티 값을 저장하는 데 사용되는 선택적 딕셔너리.
* *var* allowsEdgeAntialiasing: Bool

  레이어가 가장자리 안티앨리어싱을 허용할 것인지를 나타내는 Boolean 값
* *var* allowsGroupOpacity: Bool

  레이어를 부모로부터 분리된 그룹으로 합성할 수 있는지를 나타내는 Boolean 값

### 레이어 필터 <a href="#layer-filters" id="layer-filters"></a>

* *var* filters: \[Any]?

  레이어와 하위 레이어에 적용되는 CoreImage 필터 배열. 애니메이션 가능합니다.
* *var* compositingFilter: Any?

  레이어와 그 뒤의 컨텐츠를 구성하는데 사용되는 CoreImage 필터. 애니메이션 가능합니다.
* *var* backgroundFilters: \[Any]?\
  레이어 바로 뒤에 있는 컨텐츠에 적용할 CoreImage 필터 배열. 애니메이션 가능합니다.
* *var* minificationFilter: CALayerContentsFilter

  컨텐츠의 크기를 줄이는데 사용되는 필터.
* *var* minificationFilterBias: Float\
  최소화 필터에서 디테일 수준을 결정하는 데 사용되는 치우침 계수.
* *var* magnificationFilter: CALayerContentsFilter\
  컨텐츠의 크기를 늘리는데 사용되는 필터.

### 레이어 렌더링 동작 설정 <a href="#configuring-the-layers-rendering-behavior" id="configuring-the-layers-rendering-behavior"></a>

* *var* isOpaque: Bool

  레이어에 완전한 불투명 객체가 포함되어있는지를 알리는 Boolean 값.
* *var* edgeAntialiasingMask: CAEdgeAntialiasingMask\
  수신자의 가장자리가 래스터되는 방법을 정의하는 비트마스크입니다.
* *func* contentsAreFlipped() -> Bool

  렌더링 시 레이어 컨텐츠를 암묵적으로 플립시킬 것인지 나타내는 Boolean값을 반환합니다.
* *var* isGeometryFlipped: Bool\
  레이어와 하위 레이어의 지오메트리가 수직으로 플립되어 있는지 나타내는 Boolean 값
* *var* drawsAsynchronously: Bool\
  그리기 명령이 백그라운드 스레드에서 실행될 때 비동기식으로 처리됨을 나타내는 Boolean 값
* *var* shouldRasterize: Bool\
  레이어가 합성되기 전에 비트맵으로 렌더링되는지를 나타내는 Boolean 값. 애니메이션 가능합니다.
* *var* rasterizationScale: CGFloat

  레이어의 좌표 공간을 기준으로 컨텐츠를 래스터화할 기준 크기. 애니메이션 가능합니다.
* *var* contentsFormat: CALayerContentsFormat\
  레이어 컨텐츠의 원하는 저장 형식에 대한 힌트.
* *func* render(in: CGContext)\
  레이어와 해당 하위 레이어를 지정된 컨텍스트로 렌더링합니다.

### 레이어 지오메트리 수정 <a href="#modifying-the-layer-geometry" id="modifying-the-layer-geometry"></a>

* *var* frame: CGRect

  레이어의 프레임 사각형
* *var* bounds: CGRect

  레이어의 bound 사각형. 애니메이션 가능합니다.
* *var* position: CGPoint

  상위 레이어의 좌표공간상에서 이 레이어가 차지하고 있는 위치. 애니메이션 가능합니다.
* *var* zPosition: CGFloat\
  레이어의 z축상 위치. 애니메이션 가능합니다.
* *var* anchorPointZ: CGFloat\
  z축을 따르는 레이어 위치의 고정점. 애니메이션 가능합니다.
* *var* anchorPoint: CGPoint

  레이어 bound 사각형의 기준점을 정의합니다. 애니메이션 가능합니다.
* *var* contentsScale: CGFloat

  레이어에 적용되는 스케일 인자

### 레이어 변형관리 <a href="#managing-the-layers-transform" id="managing-the-layers-transform"></a>

* *var* transform: CATransform3D

  레이어 컨텐츠에 적용될 변. 애니메이션 가능합니다.
* *var* sublayerTransform: CATransform3D

  렌더링 시 하위 레이어에 적용할 변환을 지정합니다. 애니메이션 가능합니다.
* *func* affineTransform() -> CGAffineTransform\
  레이어 변환의 affine 버전을 반환합니다.
* *func* setAffineTransform(CGAffineTransform)\
  레이어의 변환을 지정된 affine 변환으로 설정합니다.

### 레이어 계층관리 <a href="#managing-the-layer-hierarchy" id="managing-the-layer-hierarchy"></a>

* *var* sublayers: \[CALayer]?

  레이어의 하위 레이어를 포함하는 배열
* *var* superlayer: CALayer?\
  레이어의 상위 레이어
* *func* addSublayer(CALayer)\
  하위 레이어 리스트에 새로운 레이어를 추가합니다.
* *func* removeFromSuperlayer()\
  상위 레이어로부터 이 레이어를 분리합니다.
* *func* insertSublayer(CALayer, at: UInt32)\
  지정된 레이어를 하위 레이어 리스트중 `at:` 인덱스에 삽입합니다.
* *func* insertSublayer(CALayer, below: CALayer?)\
  지정된 레이어를 이미 수신자에 속해있는 다른 `below:` 서브레이어 아래에 삽입합니다.
* *func* insertSublayer(CALayer, above: CALayer?)\
  지정된 레이어를 이미 수신자에 속해있는 다른 `above:` 서브레이어 위에 삽입합니다.
* *func* replaceSublayer(CALayer, with: CALayer)\
  지정된 레이어로 다른 `with:` 레이어 객체를 대체합니다.

### 레이어 디스플레이 업데이트 <a href="#updating-layer-display" id="updating-layer-display"></a>

* *var* layoutManager: CALayoutManager?

  하위 레이어의 배치를 담당하는 객체
* *func* setNeedsDisplay()

  레이어를 업데이트되어야 할 것으로 표시합니다.
* *func* setNeedsDisplay(CGRect)

  지정된 사각형 영역을 업데이트되어야 할 것으로 표시합니다.
* *var* needsDisplayOnBoundsChange: Bool\
  bound 사각형이 변경될 때 레이어 컨텐츠를 업데이트해야 할지 나타내는 Boolean 값
* *func* displayIfNeeded()\
  레이어가 업데이트가 필요한 것으로 표시된 경우 업데이트 프로세스를 시작합니다.
* *func* needsDisplay() -> Bool\
  레이어가 업데이트가 필요한 것으로 표시되었는지 나타내는 Boolean 값을 반환합니다.
* *class func* needsDisplay(forKey: String) -> Bool\
  `forKey:` 의 변경사항이 레이어의 재디스플레이를 요구하는지 나타내는 Boolean 값을 반환합니다.

### 레이어 애니메이션 <a href="#layer-animations" id="layer-animations"></a>

* *func* add(CAAnimation, forKey: String?)

  지정된 애니메이션 객체를 레이어의 렌더 트리에 추가합니다.
* *func* animation(forKey: String) -> CAAnimation?\
  `forKey:` 식별자의 애니메이션 객체를 반환합니다.
* *func* removeAllAnimations()

  이 레이어에 연결된 모든 애니메이션을 제거합니다.
* *func* removeAnimation(forKey: String)

  `forKey:` 로 식별된 애니메이션 객체를 제거합니다.
* *func* animationKeys() -> \[String]?

  레이어에 현재 연결된 애니메이션을 식별하는 문자열 배열을 반환합니다.

### 레이어 리사이징과 레이아웃 관리 <a href="#managing-layer-resizing-and-layout" id="managing-layer-resizing-and-layout"></a>

* *var* layoutManager: CALayoutManager?

  하위 레이아웃의 배치를 담당하는 객체
* *func* setNeedsLayout()

  레이어의 레이아웃을 무효화하고 업데이트가 필요한 것으로 표시합니다.
* *func* layoutSublayers()\
  레이어에게 레이아웃을 업데이트하도록 지시합니다.
* *func* layoutIfNeeded()\
  필요한 경우 수신자의 레이아웃을 다시 계산합니다.
* *func* needsLayout() -> Bool\
  레이어가 레이아웃 업데이트가 필요한 것으로 표시되었는지를 나타내는 Boolean 값을 반환합니다.
* *var* autoresizingMask: CAAutoresizingMask\
  슈퍼레이어 bound가 변경될 때 레이어의 크기가 어떻게 조정되어야 할지 정의하는 비트마스크입니다.
* *func* resize(withOldSuperlayerSize: CGSize)

  수신자에게 슈퍼 레이어의 크기가 변경되었음을 알립니다.
* *func* resizeSublayers(withOldSize: CGSize)

  수신자의 서브레이어에 수신자 크기가 변경되었음을 알립니다.
* *func* preferredFrameSize() -> CGSize\
  슈퍼 레이어 좌표 공간상에서의 레이어의 기본 크기를 반환합니다.

### 레이어 제약조건 관리 <a href="#managing-layer-constraints" id="managing-layer-constraints"></a>

* *var* constraints: \[CAConstraint]?

  현재 레이어의 하위 레이어를 배치하는데 사용되는 제약조건
* *func* addConstraint(CAConstraint)

  지정된 제약조건을 레이어에 추가합니다.

### 레이어 액션 가져오기 <a href="#getting-the-layers-actions" id="getting-the-layers-actions"></a>

* *func* action(forKey: String) -> CAAction?

  `forKey:` 에 할당된 action 객체를 반환합니다.
* *var* actions: \[String : CAAction]?

  레이어 action을 포함한 딕셔너리.
* *class func* defaultAction(forKey: String) -> CAAction?

  현재 클래스의 기본 action을 반환합니다.

### 좌표와 시공간 매핑 <a href="#mapping-between-coordinate-and-time-spaces" id="mapping-between-coordinate-and-time-spaces"></a>

* *func* convert(CGPoint, from: CALayer?) -> CGPoint

  `from:` 레이어의 좌표계에서 수신자의 좌표계로 CGPoint를 변환합니다.
* *func* convert(CGPoint, to: CALayer?) -> CGPoint\
  수신자의 좌표계에서 `to:` 레이어의 좌표계로 CGPoint를 변환합니다.
* *func* convert(CGRect, from: CALayer?) -> CGRect\
  `from:` 레이어의 좌표계에서 수신자의 좌표계로 CGRect를 변환합니다.
* *func* convert(CGRect, to: CALayer?) -> CGRect\
  수신자의 좌표계에서 `to:` 레이어의 좌표계로 CGRect를 변환합니다
* *func* convertTime(CFTimeInterval, from: CALayer?) -> CFTimeInterval\
  `from:` 레이어의 시공간에서 수신자의 시공간으로 시간 간격을 변환합니다.
* *func* convertTime(CFTimeInterval, to: CALayer?) -> CFTimeInterval\
  수신자의 시공간에서 `to:` 레이어의 시공간으로 시간 간격을 변환합니다.

### Hit Testing

* *func* hitTest(CGPoint) -> CALayer?

  지정된 포인트를 갖는 (수신자 자신을 포함한) 레이어 계층구조에서 수신자의 가장 먼 자손 객체를 반환합니다.
* *func* contains(CGPoint) -> Bool

  수신자가 지정된 포인트를 포함하는지 나타내는 Boolean 값을 반환합니다.

### 스크롤링 <a href="#scrolling" id="scrolling"></a>

* *var* visibleRect: CGRect

  자체 좌표 공간상 레이어의 가시적 영역.
* *func* scroll(CGPoint)

  레이어의 가장 가까운 상위 스크롤 레이어에서 스크롤을 시작하여 지정된 점이 스크롤 레이어의 원점에 오도록 합니다.
* *func* scrollRectToVisible(CGRect)

  지정된 사각형이 보일때까지 레이어의의 가장 가까운 조상 스크롤 레이어에서 스크롤을 시작합니다.

### 레이어 식별 <a href="#identifying-the-layer" id="identifying-the-layer"></a>

* *var* name: String?

  수신자의 이름

### Key-Value Coding Extensions

* *func* shouldArchiveValue(forKey: String) -> Bool\
  `forKey:` 의 값이 아카이브되어야 할지를 나타내는 Boolean값을 반환합니다.
* *class func* defaultValue(forKey: String) -> Any?\
  `forKey:` 와 연결된 기본값을 지정합니다.

### 상수 <a href="#constants" id="constants"></a>

* *struct* CAAutoresizingMask

  이 상수들은 [autoresizingMask](/sagwa/etc/not-found.md) 프로퍼티로 사용됩니다.
* Action Identifiers

  이 상수들은 미리 정의된 action 식별자로서 [action(forKey:)](/sagwa/etc/not-found.md), [add(\_:forKey:)](/sagwa/etc/not-found.md), [defaultAction(forKey:)](/sagwa/etc/not-found.md), [removeAnimation(forKey:)](/sagwa/etc/not-found.md), [레이어 필터](/sagwa/graphics-and-games/core-animation/calayer.md#layer-filters)와 [CAAction](/sagwa/graphics-and-games/core-animation/caaction.md) 프로토콜 메서드인 [run(forKey:object:arguments:)](/sagwa/etc/not-found.md)에서 사용됩니다.
* *struct* CAEdgeAntialiasingMask

  이 마스크는 [edgeAntialiasingMask](/sagwa/etc/not-found.md) 프로퍼티로 사용됩니다.
* Identity Transform

  Core Animationd에서 사용되는 identity transform matrix를 정의합니다.
* Scaling Filters

  이 상수들은 [magnificationFilter](/sagwa/etc/not-found.md)와 [minificationFilter](/sagwa/etc/not-found.md)에서 스케일링 필터로 사용됩니다.
* *struct* CATransform3D

  Core Animation 전체에서 사용되는 표준 변환 매트릭스입니다.

## 관련 문서 <a href="#relationships" id="relationships"></a>

### 상속받은 대상 <a href="#inherits-from" id="inherits-from"></a>

* NSObject

### 준수하는 프로토콜 <a href="#conforms-to" id="conforms-to"></a>

* CAMediaTiming
* CVarArg
* Equatable
* Hashable
* NSSecureCoding

## 같이 보기 <a href="#see-also" id="see-also"></a>

### 레이어 기초 <a href="#layer-basics" id="layer-basics"></a>

* *protocol* CALayerDelegate\
  레이어 관련 이벤트에 응답하기 위해 앱이 구현할 수 있는 메서드
* *class* CAConstraint\
  두 레이어 사이의 단일 레이아웃 제약 조건
* *protocol* CALayoutManager\
  객체가 레이어와 그 하위 레이어의 레이아웃을 관리할 수 있게 해주는 메서드
* *class* CAConstraintLayoutManager

  제약 기반 레이아웃 관리자를 제공하는 객체
* *protocol* [CAAction](/sagwa/graphics-and-games/core-animation/caaction.md)

  객체가 CALayer 변경에 의해 트리거 된 액션에 응답할 수 있게 해주는 인터페이스


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://melod-it.gitbook.io/sagwa/graphics-and-games/core-animation/calayer.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
