[iOS] SF Symbols — Colors

Monochrome, Hierarchical, Palette, Multicolor 네가지 SymbolRenderingMode 를 알아봅시다

naljin
8 min readJun 5, 2022

들어가기 전에

오늘은 HIG 에 나와있는 SF Symbols 의 내용 중에 Colors 섹션 내용을 살펴볼겁니다

사실 번역이라고 봐도 무방하니 언제나처럼 원문 읽는걸 추천드림다 (+ 하단에 WWDC 2022 SF Symbols 관련 내용이 추가되었습니다)

그럼 ㄱㄱ

Colors

우선 cloud.sun.rain.fill 이라는 SF Symbol 을 예로 들어봅시다

cloud.sun.rain.fill

단일 색상..은 너무 밋밋하니까 symbol 을 아래처럼 예쁘게 색칠하고 싶어! 라고 생각을 할 수 있단 말이져?

고로 SF Symbol 에서는 symbol 에 색상을 적용할 때 사용할 수 있는 4가지 렌더링 모드를 제공합니다

네가지 렌더링 모드가 무엇이 있는지는 조금 이따 살펴보기로 하고요!

SF Symbols 3 에서는 렌더링 모드를 지원하기 위해 심볼의 path를 primary, secondary, tertiary 와 같은 별개의 레이어로 구성합니다

예를 들어, cloud.sun.rain.fill 기호는 세 개의 레이어로 구성됩니다.

primary 레이어에는 구름 경로가 포함되고,

primary

secondary 레이어에는 태양과 광선을 정의하는 경로가 포함되며,

secondary

tertiary 레이어에는 빗방울 경로가 포함됩니다

tertiary

SF Symbols 3 에서는 Monochrome, Hierarchical, Palette, Multicolor 의 렌더링 모드를 지원하는데요, 어떤 렌더링 모드를 선택하느냐에 따라 다양한 appearance을 생성할 수 있습니다

예를 들어 Hierarchical 렌더링 모드는 동일한 색상에 다른 opacity 를 각 레이어에 할당해서 심볼에 깊이를 부여하는 시각적 계층(visual hierarchy)을 생성합니다.

그럼 하나씩 살펴보도록 하죠 ㄱ ㄱ!

Monochrome

심볼에 한 가지 색상을 적용합니다.

path는 지정한 색상으로, path 안의 나머지 부분은 투명색으로 렌더링됩니다.

Monochrome

아래와 같이 foregroundStyle(_:_:_:) modifier 를 통해 첫번째, 두번째, 세번째 색상을 모두 지정해줘도 첫번째 색상을 기준으로 설정 됩니다.

Image(systemName: "cloud.sun.rain.fill")
.symbolRenderingMode(.monochrome)
.foregroundStyle(.red, .yellow, .green)

Hierarchical

심볼에 한가지 색상을 적용하되, 각 레이어의 hierarchical level 에 따라 색상의 불투명도를 변경합니다.

Hierarchical

위와 같이 foregroundStyle(_:_:_:) modifier 를 통해 첫번째, 두번째, 세번째 색상을 모두 지정해줘도 첫번째 색상을 기준으로 설정됩니다. 다만 해당 색상을 기준으로 불투명도 또한 설정됩니다.

Image(systemName: "cloud.sun.rain.fill")
.symbolRenderingMode(.hierarchical)
.foregroundStyle(.red, .yellow, .green)

Palette

레이어당 하나의 색상을 사용하여 각 심볼에 두 개 이상의 대조 색상을 적용합니다.

만약 3단계 계층 구조를 가진 심볼에 대해 두 가지 색상만 지정하면 secondary 와 tertiary 레이어는 동일한 색상을 사용합니다.

Palette

위와 같이 foregroundStyle(_:_:_:) modifier 를 통해 첫번째, 두번째, 세번째 색상을 모두 지정했을때 모두 지정한대로 설정됩니다.

Image(systemName: "cloud.sun.rain.fill")
.symbolRenderingMode(.palette)
.foregroundStyle(.red, .yellow, .green)

만약 3단계 계층 구조를 가진 cloud.sun.rain.fill 에 두가지 색상만 적용하면 위에서 설명한대로 secondary 와 tertiary 레이어는 동일한 색상을 사용합니다. (해와 빗방울이 노란색)

Image(systemName: "cloud.sun.rain.fill")
.symbolRenderingMode(.palette)
.foregroundStyle(.red, .yellow)

Multicolor

의미를 향상시키기 위해 일부 심볼에 대해 시스템에 정의된 고유 색상을 적용합니다.

예를 들어, 잎(leaf) 심볼은 실제 세계의 잎 모양을 반영하기 위해 녹색을 사용하고, 휴지통 기호는 데이터 손실을 나타내기 위해 빨간색을 사용합니다.

일부 multicolor symbols 들은 다른 색상을 받을 수 있는 레이어가 포함되어 있습니다

Multicolor

위와 같이 foregroundStyle(_:_:_:) modifier 를 통해 첫번째, 두번째, 세번째 색상을 모두 지정했음에도 시스템에서 정의한 색상을 사용합니다.

해는 노란색, 구름은 하얀색, 비는 파란색..! 꽤나 실제 세계와 비슷해보이네요

Image(systemName: "cloud.sun.rain.fill")
.symbolRenderingMode(.multicolor)
.foregroundStyle(.red, .yellow, .green)
.background(Color.brown)

--

--

Responses (1)