iOS/Swift

CAEmitterLayer

ywangnon 2025. 4. 12. 23:32
반응형

CAEmitterLayer란? 🤔

입자를 뿌려주는 레이어 (Emitter = 방출기)

쉽게 표현하면
→ "입자를 정의한 CAEmitterCell 들을 화면에 실제로 뿌려주는 판"


구조적 역할 정리

UIKit View Layer
      ↓
[ CAEmitterLayer ] → 입자 방출 담당
      ↓
[ CAEmitterCell ] → 입자 모양/성질 담당

핵심 속성 (자주 쓰는 것만 정리)

속성 설명 활용
emitterPosition 입자 출발 위치 CGPoint
emitterSize 입자 출발 영역 CGSize
emitterShape 방출 형태 .point / .line / .rectangle / .circle
emitterMode 방출 방식 .surface / .outline / .volume
emitterCells 방출할 셀 목록 [CAEmitterCell]
renderMode 렌더링 방식 .additive (빛나는 효과 추천)

emitterShape 옵션

옵션 모양 설명
.point 한 점에서 나옴
.line 라인 전체에서 나옴
.rectangle 사각형 넓게 뿌릴 때
.circle 원 형태 방출

emitterMode 옵션

옵션 설명
.points 각 point에서 방출
.outline 윤곽선 따라 방출
.surface 영역 전체에서 방출
.volume 전체 공간 내부 방출

renderMode 옵션

옵션 설명
.unordered 섞임
.oldestFirst 먼저 생긴게 위
.oldestLast 나중 생긴게 위
.backToFront 뒤 → 앞 순서
.additive 빛나는 느낌 (Glow 효과)

예시 코드

let emitterLayer = CAEmitterLayer()
emitterLayer.emitterPosition = CGPoint(x: view.center.x, y: view.center.y)
emitterLayer.emitterSize = CGSize(width: 100, height: 100)
emitterLayer.emitterShape = .circle
emitterLayer.renderMode = .additive
emitterLayer.emitterCells = [emojiCell, bubbleCell]

view.layer.addSublayer(emitterLayer)

라이프 사이클 흐름

  1. CAEmitterCell 만들어서 셋팅
  2. CAEmitterLayer에 emitterCells로 연결
  3. emitterLayer를 View.layer에 add
  4. 알아서 입자 뿌려짐!

CAEmitterLayer vs CAEmitterCell 차이

구분 CAEmitterLayer CAEmitterCell
역할 입자 방출기 입자 정의
중요 속성 position, shape, size contents, lifetime, velocity
갯수 레이어는 1개라도 셀은 여러개 가능 여러 개

활용 예시

  • 돈 터뜨리기 → emitterShape: .point
  • 눈 내리기 → emitterShape: .line
  • 거품 올라가기 → emitterShape: .rectangle
  • 폭죽 → emitterShape: .circle
  • 별 빛나는 효과 → renderMode: .additive

성능 주의사항 ⚠️

  • birthRate 너무 크면 렉 걸림
  • lifetime 길면 오래 남아서 메모리 차지
  • scale 적절하게 설정
  • 꼭 필요 없으면 birthRate = 0 으로 꺼주기

한줄 정리 🧠

CAEmitterLayer = "입자를 뿌리는 무대 + 위치/형태 결정"


반응형

'iOS > Swift' 카테고리의 다른 글

Swift XCTest 정리 - 입문  (0) 2025.04.15
CAEmitterCell  (0) 2025.04.12
OSLog 요소  (0) 2025.04.11
CoreBluetooth  (0) 2025.04.03
Apple API Guidelines - Naming  (0) 2025.03.19