반응형

🏁 학습할 내용
- BlendMode
- 정의
- 사용하는 목적
- 종류
🌈 BlendMode
✅ 정의
2개의 뷰를 겹칠 때, 어떻게 섞을 지 결정하는 방식이다.
여기서 중요한 점은 2개의 뷰 중 어떤 뷰에 적용을 해줘야할까?
정답은 앞에 있는 뷰에 적용한다.
배경뷰와 겹친 부분에 효과를 적용하는 것이기 때문에 앞에 있는(효과가 들어갈) 뷰에 적용한다,
🎯 사용하는 목적
즉, 디자인을 더 예쁘고, 눈에 띄게 만들기 위해 쓰는 도구
일반적인 예
- 이미지나 뷰에 특별한 시각 효과를 주고 싶을 때
- 텍스트나 도형을 배경과 자연스럽게 섞고 싶을 때
- 어두운/밝은 느낌, 조명 효과 등을 코드로 제어하고 싶을 때
🎨 종류
기본 형태는 다음 코드와 사진으로 진행한다.

public var body: some View {
HStack {
Color.red.frame(width: 50, height: 50, alignment: .center)
Color.green.frame(width: 50, height: 50, alignment: .center)
.rotationEffect(.degrees(45))
.padding(-20)
}
}
🌑 Darkening
배경보다 어두운 색이 남는 방식
- multiple: 어두운 영역은 더 어두워짐
- darken: 두 색 중 더 어두운 쪽으로
- colorBurn: 배경과 전경의 대비를 높이면서 어둡게함
- plusDarker: 두 색상을 더해, 어두운 쪽으로 선택

🔆 Lightening
배경보다 밝은 색이 남는 방식
- lighten: 두 색 중 더 밝은 쪽으로
- screen: 색을 반대로 곱하고 다시 반전
- colorDodge: 배경과 전경의 대비를 높이면서 밝게
- plusLighter: 두 색상을 더해, 밝은 쪽 선택

✨ Contrast
색 대비를 강조하는 용도
- overlay: multiply + screen 조합. 배경에 따라 밝거나 어둡게
- softLight: 부드럽게 빛나는 효과
- hardLight: 강하게 빛나는 효과

🪞 Inverting
색을 반전시키거나 반전된 색을 기반으로 연산하는 블랜딩 모드
- difference: 배경과 전경 차이만 남김
- exclusion: difference보다 더 부드럽게 반전됨

🖍️ Mixing color component
RGB 색상, 채도, 밝기 같은 개별 요소에 적용
- hue: 배경의 밝기+채도에 위 뷰의 색상(Hue) 를 입힘
- saturation: 배경의 밝기+색상에 위 뷰의 채도(Saturation) 를 입힘
- color: 배경의 밝기에 위 뷰의 색상+채도를 입힘
- luminosity: 배경의 색상+채도에 위 뷰의 밝기(Lightness) 를 입힘

🧮 Accessing proter-duff modes
픽셀을 어떻게 그릴까를 수학적으로 정의한 모델
- sourceAtop: 기본값, 배경위에 전경이 그려짐
- destinationOver: 배경이 전경위에 올라옴
- destinationOut: 배경이 전경과 겹치지 않는 부분만 보존되고, 겹치는 부분은 투명처리

출처
BlendMode | Apple Developer Documentation
Modes for compositing a view with overlapping content.
developer.apple.com
32. globalCompositeOperation - 색상 블렌딩모드 (합성)
GuriZzang.com에 오시면 더 자세한 내용을 보실 수 있습니다. globalCompositeOperation캔버스에 그리려는 색이 그려져 있던 색과 겹쳐질때 어떤식으로 조합할지 지정합니다. 포토샵을 해보신 분들은 아시
combatguri.tistory.com
반응형
'iOS > SwiftUI' 카테고리의 다른 글
| [ThirdParty] SwiftUI-Shimmer 해석하기 (3) | 2025.07.27 |
|---|---|
| RedactionReasons (1) | 2025.07.27 |
| [@Environment] layoutDirection (0) | 2025.07.26 |
| 스유에서 lineHeight과 letterSpacing 적용하기 (2) | 2025.07.22 |
| .contentShape (0) | 2025.07.19 |