- SF(San Fransisco) 폰트가 나왔을 때 이야기
- SF Mono: 코딩용 폰트
- Text는 Character의 집합
- Character는 Code로 나타남
- Character를 화면에 표현하기 위해서는 Glyph가 필요함
- Glyph는 별도로 저장되어 있는 Outline(점들의 sequence)들로, font 파일 안에 있음
- 보통은 Character - Glyph는 1대 1매칭이지만, 옵션으로 변경 시킬수 있다.
- 자동으로 되는 것이 있고(ex. Ligature), 수동으로 켜야만 되는 것이 있다.
- 폰트는 다양한 스타일을 가질 수 있고,(bold, italic) 스타일은 달라도 같은 폰트라고 생각할 수 있는 것들을 묶어놓은 것이 typeface이다.(같은 디자인 철학 아래 있음)
- 지금까지 설명한 것들을 이용해서 텍스트를 UI에 표현하는 것이 typography이다.
- 폰트 디자이너들은 glyph단계부터 typeface까지를 책임지고 만드는 사람이다.
- negative space: 글리프가 차지하는 영역이외의 영역
- spacing: Glyph 사이의 기본 간격. 폰트에 내장되어 변경 불가
- tracking: Glyph 간격을 전역적으로 조정하기 위한 값.
- 작은 폰트에서는 띄워줄 필요가 있고, 큰 폰트에서는 붙여줄 필요가 있다.
- kerning: 특정 글리프 사이를 조정하기 위한 값으로, tracking의 예외 사항
- 해당 폰트의 kerning table도 폰트 파일에 포함되어 있고, 바꿀 수는 없다.
- leading: 라인 사이의 간격
- spacing과 kerning은 고정값, tracking과 leading은 조정 가능
- Scale에 따른 Legibility
- 큰 폰트에서 가독성 있던 내용이 작은 폰트에서는 가독성이 떨어질 수 있다.
- 이는 Density의 차이로 인한 것이다. -> Negative space의 넓이차이
- Voice: 폰트 자체가 주는 느낌
- typography를 위한 도구
- System Font
- 모든 애플 플랫폼에서의 기본 폰트. -> 거의 동일한 API로 사용 가능
- 9개의 다른 스타일을 가진다.
- 글자 별로 구분된 트래킹 타입
- Dynamic Type
- iOS와 watchOS에서 사용 가능
- 두가지 측면이 있다.
- API적 측면: perferredFont: 의미적으로 폰트를 사용할 수 있기 만듦
- content size categories
- Custom Font
- font를 선택하거나 번들에 포함시킨다.
- Content Size Category 테이블을 훑는다.
- 필요하면 테이블을 구성해야 한다.
- 필요 속성 - (pointSize: CGFloat, styleName: String, leading: CGFloat, tracking: CGFloat)
- accessibility 폰트 속성도 있음을 잊지 말자
- traitCollectionDidChange를 오버라이드 한다.
- 폰트와 문단 속성을 업데이트 한다.
- 레이아웃 변경
- 폰트 선택
- 한번에 하나만 쓰자
- 폰트 디자인 컨셉을 이해할 필요가 있다.
- 엔간하면 기본쓰고, 거기서 옵션을 조정하자.
- 시스템 폰트 옵션
- 화살표 텍스트 제공
- 높은 가독성을 위한 대체 글리프
let pointSize = 60.0
let systemFontDesc = UIFont.systemFont(
ofSize: pointSize, weight: UIFontWeightLight).fontDescriptor()
let highLegibilityFontDesc = systemFontDesc.addingAttributes(
[
UIFontDescriptorFeatureSettingAttribute:
[
[
UIFontFeatureTypeIdentifierKey: kStylisticAlternativesType,
UIFontFeatureSelectorIdentifierKey: kStylisticAltSixOnSelector,
]
]
]
)
label.font = UIFont(descriptor: highLegibilityFontDesc, size: pointSize)
- small caps: 작은 대문자
- 대문자를 소문자 크기만큼으로 쓰는 것
- 대문자나 소문자 만으로 이루어진 글을 쓸 때 고려해볼 만 하다.
- 숫자나 구두점에도 적용된다.
let pointSize = 60.0
let systemFontDesc = UIFont.systemFont(
ofSize: pointSize, weight: UIFontWeightLight).fontDescriptor()
let highLegibilityFontDesc = systemFontDesc.addingAttributes(
[
UIFontDescriptorFeatureSettingAttribute:
[
[
UIFontFeatureTypeIdentifierKey: kUpperCaseType,
UIFontFeatureSelectorIdentifierKey: kUpperCaseSmallCapsSelector,
]
]
]
)
label.font = UIFont(descriptor: highLegibilityFontDesc, size: pointSize)