Swashは、ダイナミックタイプのベイクドインサポートを備えた、 UIFontのシンプルで安全で表現力のある抽象化です。
カスタムフォントを定義するには、 Fontプロトコルに準拠するString列を作成するだけです。
enum Papyrus : String , Font {
case regular = " Papyrus "
case condensed = " Papyrus-Condensed "
}プロジェクトでフォントの使用を開始するために必要なのはこれだけです!
label . font = Papyrus . regular . of ( size : 17 )スケーリングにUIFontMetricsを使用します。 adjustsFontForContentSizeCategory to trueにadcustSSPONTFORCONTENTSIZETATERYは、ユーザーがコンテンツサイズの設定を変更したときにフォントを自動的に更新するようにラベルに指示します。テキストスタイルのデフォルトサイズの選択に関するガイダンスについては、IOS、WatchOS、およびTVOのAppleのHuman Interfaceガイドラインから引き出された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 、NIL maxSize値でpreferred重量に対してSystemFontでのみ動作します。他のいずれの場合でも、 traitCollectionDidChange(_:)のフォントを更新するか、 UIContentSizeCategoryDidChange通知を観察することにより、フォントを更新する必要があります。これは、 preferred重量がUIFont.preferredFont(forTextStyle:)の結果を直接返すためです。
iOSおよびTVOで「Bold Text」デバイス設定をサポートするために、任意のFontにboldTextMappingプロパティを実装できます。
var boldTextMapping: MyFont {
switch self {
case .regular: return .bold
case .bold: return .black
case .black: return self
}
}
ユーザーがデバイス設定で「太字」をオンにしている場合、すべての通常の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:)が呼び出されます。これにより、デフォルトの-Ononeコンパイラ最適化セットでデバッグビルドがクラッシュします。これは、失敗したフォントの初期化を特定するのに役立つためです。より高い最適化レベルのリリースビルドはクラッシュしないため、馬鹿げたフォントでの生産でアプリがクラッシュすることを心配する必要はありません。
pod 'Swash' github "Mindgrub/Swash"
更新時にプラットフォームを指定してください(例: carthage update --platform iOS )。それ以外の場合、3つのフレームワーク(iOS、TVOS、およびWatchOS)が追加されます。
SwashはMITライセンスの下で利用できます。詳細については、ライセンスファイルを参照してください。