Swash는 동적 유형에 대한 구운 지원으로 UIFont 의 단순하고 안전하며 표현적인 추상화입니다.
사용자 정의 글꼴을 정의하려면 Font 프로토콜을 준수하는 String 열거를 만듭니다.
enum Papyrus : String , Font {
case regular = " Papyrus "
case condensed = " Papyrus-Condensed "
}그것이 프로젝트에서 글꼴을 사용하기 시작하는 데 필요한 전부입니다!
label . font = Papyrus . regular . of ( size : 17 ) 스케일링에 UIFontMetrics 사용합니다. 설정을 true 로 adjustsFontForContentSizeCategory 설정은 사용자가 컨텐츠 크기 환경 설정을 변경할 때 글꼴을 자동으로 업데이트하도록 레이블에 표시합니다. 텍스트 스타일에 대한 기본 크기 선택에 대한 지침은 블로그 게시물을 참조하거나 iOS, WatchOS 및 TVOS에 대한 Apple의 휴먼 인터페이스 지침에서 가져온 Swash의 제공 기본값을 사용하십시오.
label1 . adjustsFontForContentSizeCategory = true
label2 . adjustsFontForContentSizeCategory = true
label1 . font = Papyrus . condensed . of ( textStyle : . headline )
// Optional size cutoff and default size.
label2 . font = GillSans . bold . of ( textStyle : . title1 , defaultSize : 28 , maxSize : 38 ) 시스템 글꼴 스케일링을 사용하고 기본 크기 값이 없습니다. adjustsFontForContentSizeCategory UIFontMetrics 를 사용해야하므로 iOS 11 이전에 사용자 정의 글꼴에는 사용되지 않습니다. traitCollectionDidChange(_:) 또는 UIContentSizeCategoryDidChange 알림을 관찰하여 글꼴을 수동으로 업데이트해야합니다.
label . font = Papyrus . condensed . of ( style : . headline )
// Optional size cutoff
label . font = GillSans . bold . of ( style : . title1 , maxSize : 30 ) SystemFont 사용하여 다양한 가중치의 동적 유형을 지원하고 프로젝트에서 글꼴 구문을 더 통합 할 수 있습니다.
label1 . font = SystemFont . light . of ( size : 17 )
label2 . adjustsFontForContentSizeCategory = true
label2 . font = SystemFont . preferred . of ( textStyle : . body )
label3 . font = SystemFont . semiboldItalic . of ( textStyle : . body , maxSize : 30 ) 중요 참고 사항 : adjustsFontForContentSizeCategory SystemFont 에서만 maxSize 값의 preferred 가중치에 대해서만 작동합니다. 다른 경우에는 traitCollectionDidChange(_:) 에서 글꼴을 업데이트하거나 UIContentSizeCategoryDidChange 알림을 관찰하여 업데이트해야합니다. preferred 무게가 UIFont.preferredFont(forTextStyle:) 의 결과를 직접 반환하기 때문입니다.
iOS 및 TVOS에서 "Bold Text"장치 설정을 지원하기 위해 모든 Font 에서 boldTextMapping 속성을 구현할 수 있습니다.
var boldTextMapping: MyFont {
switch self {
case .regular: return .bold
case .bold: return .black
case .black: return self
}
}
이제 사용자가 장치 설정에서 "Bold Text"를 켜면 모든 일반 MyFont 인스턴스가 대담 해집니다.
원한다면 UIAccessibility.boldTextStatusDidChangeNotification NotificationCenter 하고 업데이트 할 때 글꼴을 설정할 수 있습니다.
글꼴 캐스케이딩을 지원하기 위해 모든 Font 에서 정적 cascadeList 속성을 구현할 수 있습니다. 글꼴이 레이블에 사용되는 문자를 지원하지 않는 경우이 목록은 사용할 폴백 글꼴을 제공합니다.
enum Papyrus: String, Font {
case condensed = "Papyrus-Condensed"
case regular = "Papyrus"
var cascadeList: [CascadingFontProperties] {
[.init(Damascus.regular)]
}
}
파피루스는 아랍어 캐릭터를 지원하지 않습니다. 그래서 여기서 우리는 다마스커스를 폴백으로 제공했습니다. 폴백이 제공되지 않으면 시스템 글꼴은 지원되지 않는 문자에 사용됩니다.
Swash는 글꼴 보일러 플레이트를 기록하려고 시도 할 수 있습니다!
Swash . logBoilerplate ( forFontsWithFamilyNamesContaining : " gill " )산출:
enum GillSans: String, Font {
case GillSans-Italic = "GillSans-Italic"
case GillSans-SemiBold = "GillSans-SemiBold"
case GillSans-UltraBold = "GillSans-UltraBold"
case GillSans-Light = "GillSans-Light"
case GillSans-Bold = "GillSans-Bold"
case GillSans = "GillSans"
case GillSans-SemiBoldItalic = "GillSans-SemiBoldItalic"
case GillSans-BoldItalic = "GillSans-BoldItalic"
case GillSans-LightItalic = "GillSans-LightItalic"
}
출력을 프로젝트에 복사하여 복사하십시오. 아마도 케이스 이름을 약간 의사가 필요로 할 것입니다.
사용자 정의 글꼴이 초기화되지 않으면 assertionFailure(_:file:line:) 호출됩니다. 이렇게하면 Default -Onone 컴파일러 최적화 세트와 함께 디버그 빌드가 충돌합니다. 이는 실패한 글꼴 초기화를 식별하는 데 도움이되는 것입니다. 최적화 수준이 높을수록 릴리스 빌드는 충돌하지 않으므로 어리석은 글꼴을 통해 앱 충돌에 대해 걱정할 필요가 없습니다.
pod 'Swash' github "Mindgrub/Swash"
업데이트시 플랫폼을 지정하십시오 (예 : carthage update --platform iOS ). 그렇지 않으면 3 가지 프레임 워크 (iOS, TVOS 및 WatchOS)가 모두 추가됩니다.
Swash는 MIT 라이센스에 따라 사용할 수 있습니다. 자세한 내용은 라이센스 파일을 참조하십시오.