[Swift] CALayer

팔랑이·2025년 4월 10일
0

iOS/Swift

목록 보기
70/71

뷰를 짜다 보면.layer.cornerRadius, .layer.shadowOpacity 같은 속성들을 사용하게 되는데, 왜 얘네만 .layer를 따로 써야 할까? 해서 찾아본 CALayer에 대해 공부한 내용 정리.

참고: 개발자 소들이님 블로그

CALayer

CALayer는 iOS에서 화면에 보이는 모든 시각적 콘텐츠를 그리는 객체다. 우리가 보는 버튼, 라벨, 이미지 등은 실제로 UIView가 아니라 CALayer가 그려주는 것이다. UIView는 사용자 인터랙션, 계층 관리, 레이아웃 같은 고수준 역할을 맡고, 시각 표현은 내부에 포함된 CALayer가 전담한다.

참고: 그래픽 스택의 추상화 흐름 (하위레벨 ~ 상위레벨 수준)

  • OpenGL: 가장 하위에서 GPU 직접 제어, 그래픽 하드웨어에 가장 빠르게 접근
  • Core Graphics: 복잡한 OpenGL보다 간단한 2D API 👉🏻 CGColor, CGRect 등이 여기에 속함!
  • Core Animation: 애니메이션과 고급 시각 효과를 위한 프레임워크 👉🏻 CALayer의 CA가 Core Animation이다.
  • UIKit: UIView를 통해 터치, 계층, 레이아웃 등을 제공

UIKit은 CALayer 위에 얹힌 UI 프레임워크고, UIView는 CALayer를 내부에 하나 가지고 있다.
UIView.layer는 항상 존재하며, 개발자가 설정하는 많은 시각적 속성들이 결국 이 CALayer에 적용된다.

CALayer의 구성과 주요 속성

  • cornerRadius: 모서리를 둥글게 만듦
  • borderWidth, borderColor: 테두리 설정
  • shadowOpacity, shadowOffset, shadowRadius: 그림자 설정
  • opacity: 전체 레이어의 투명도
  • masksToBounds: 자식 layer가 부모를 넘지 않게 클리핑
  • anchorPoint: transform 기준점
  • position, bounds, frame: 위치와 크기 지정

CALayer는 뷰 없이도 사용할 수 있으며, UIView와 같이 여러 개의 서브 레이어를 직접 구성해 복잡한 시각 효과를 만들 수도 있다.

예를 들어 UIView를 여러 개 만들지 않고도, CALayer만으로 색상 블록이나 애니메이션된 요소들을 구현할 수 있다.

이 경우 메모리나 렌더링 측면에서 더 효율적이다! 따라서 인터랙션이 필요 없는 간단한 뷰(색상블록, 구분선, 심지어 UIImageView보다도 이미지처리가 빠르다!)나 저수준 애니메이션에 접근할 때 CALayer를 활용해볼 수 있다.

단, Auto Layout 사용이 불가능하고 frame에 직접 접근해야 하는데, 그래서 처리속도가 훨씬 빠르다.

profile
정체되지 않는 성장

0개의 댓글