-
[SwiftUI] SF Symbol에서 계층, 팔레트, 여러 가지 색상 사용하기공부/Swift(프로그래밍 언어) 2026. 4. 28. 18:50반응형
SF Symbols는 iOS 등의 앱을 개발할 때 사용할 수 있도록 애플에서 제공하는 이미지 모음입니다.

애플에서 개발자 및 디자이너들이 검색해서 사용할 수 있도록 SF Symbols 라는 프로그램을 제공합니다. SF Symbols 탐색기를 보면 단색 외에 계층, 팔레트, 여러 가지 색상 및 애니메이션이라는 메뉴가 있는 것을 볼 수 있습니다.

SF Symbol 계층(hierarchical), 팔레트(palette), 멀티컬러(multicolor)는 아이콘을 “한 색이 아니라 여러 레이어로 나눠 색을 표현하는 방식”입니다.
이것을 SwiftUI 및 UIKit 에서 프로그래밍적 방식으로 사용할 수 있습니다. 이 포스트에서는 SwiftUI를 중점으로 살펴보며, UIKit은 마지막에 간단하게 요약 정리하겠습니다.
사전 작업 - 이용 가능한 버전인지 확인
iOS 버전에 따라 지원하지 않는 경우가 있으므로 먼저 버전 지원 여부를 확인합니다.

버전 확인 오른쪽 패널에서 [정보] 탭을 누르면 (첫 화면으로 표시됨) 사용 가능한 버전을 확인할 수 있습니다. 만약 위에 목록이 없다면 지원하지 않는 형태라는 의미입니다. 위에서는 '여러 가지 색상' 이 없으므로 그것을 적용한다 하더라도 단색과 동일하게 표시됩니다.
렌더링 종류
단색 (monochrome)
아이콘 색상이 한 가지이며, 별도의 옵션을 지정하지 않은 경우 모두 단색으로 표시됩니다.
계층 (Hierarchical)

person.3.fill 계층 하나의 색을 기반으로 명도 차이로 레이어를 표현합니다.
- 색: 1개
- 밝기/투명도로 깊이 표현
SwiftUI에서는 다음과 같이 사용할 수 있습니다.
Image(systemName: "person.3.fill") .symbolRenderingMode(.hierarchical) .foregroundStyle(.blue)팔레트 (Palette)

person.3.sequence.fill 팔레트 여러 색을 직접 지정해서 레이어별로 적용합니다.
- 색: 여러 개 직접 지정
- 레이어 순서대로 색이 적용됨
- 첫 번째 색: 메인
- 두 번째, 세 번째: 내부 레이어
Image(systemName: "person.3.sequence.fill") .symbolRenderingMode(.palette) .foregroundStyle(.blue, .green, .orange)색 적용시 주의할 점
색상은 레이어 개수는 이미지마다 다를 수 있습니다.

person.3.fill 팔레트 person.3.fill 팔레트의 경우 2개의 레이어가 있으며, 색상 파라미터 중 노란색은 무시됩니다.

xmark.square.fill 팔레트 색상 순서는 일관적이지 않기 때문에 xmark.square.fill 이라는 이미지에서는 민트색이 나오지 않습니다. 이미지마다 다르니 SwiftUI 코드에서 실제로 색상을 입력해보고 순서에 맞게 조정해야 합니다.
여러 가지 색상 - 멀티컬러 (Multicolor)

xmark.circle.fill 여러 가지 색상 애플이 정의한 기본 색상을 그대로 사용합니다. 색상을 커스터마이징 할 수 없으며 제공된 대로 사용해야 합니다. 이 옵션이 없는 경우도 있으며 이 경우 기본 옵션(단색)이 적용됩니다. 위의 예제의 경우 색상을 갈색으로 지정했지만 애플에서 제공하는 값이 빨간색이므로 빨간색으로마만 표시됩니다.
- 색: 시스템에서 정해진 값
Image(systemName: "xmark.circle.fill") .symbolRenderingMode(.multicolor)UIKit에서 사용하는 방법
SwiftUI처럼 modifier가 아니라 UIImage.SymbolConfiguration을 사용합니다.
계층 (Hierarchical)
let config = UIImage.SymbolConfiguration(hierarchicalColor: .systemBlue) let image = UIImage( systemName: "person.3.fill", withConfiguration: config ) imageView.image = image→ 한 색 기반 + 명도 차이로 레이어 표현
팔레트 (Palette)
let config = UIImage.SymbolConfiguration( paletteColors: [.systemBlue, .systemGreen, .systemOrange] ) let image = UIImage( systemName: "person.3.fill", withConfiguration: config ) imageView.image = image→ 여러 색을 레이어별로 적용
여러 가지 색상 - 멀티컬러 (Multicolor)
let config = UIImage.SymbolConfiguration.preferringMulticolor() let image = UIImage( systemName: "folder.badge.person.crop.fill", withConfiguration: config ) imageView.image = image→ 애플 기본 색 그대로
기본 단색
imageView.image = UIImage(systemName: "person.3.fill") imageView.tintColor = .systemBlueSwiftUI ↔ UIKit 대응
SwiftUI UIKit .symbolRenderingMode(.hierarchical) hierarchicalColor: .symbolRenderingMode(.palette) paletteColors: .symbolRenderingMode(.multicolor) .preferringMulticolor() 반응형'공부 > Swift(프로그래밍 언어)' 카테고리의 다른 글
Embedded Swift: 핀(GPIO Pin) 제어하기 (3) - 도트 전광판 제어 (MAX7219 32x8 도트 매트릭스 LED 5핀제어) (3) 2026.05.03 Embedded Swift: 핀(GPIO Pin) 제어하기 (2) - 입력 받기 (Input Mode) (1) 2026.04.29 Embedded Swift: 핀(GPIO Pin) 제어하기 (1) - LED 깜빡이기 (0) 2026.04.23 Embedded Swift: ESP32-C6을 Wifi에 연결시켜 웹 서버로 사용하기, 브라우저에서 LED 제어 (0) 2026.03.31 Swift iOS: 디바이스 자체 설정에 방향 락이 걸려있을 때도 인식하게 하는 법 (0) 2026.03.23