Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo...
Transcript of Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo...
![Page 1: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/1.jpg)
These are confidential sessions—please refrain from streaming, blogging, or taking pictures
Session 223
Using Fonts with Text Kit
Ned HolbrookTypographic Engineer
![Page 2: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/2.jpg)
What You’ll Learn
• Specifying fonts■ Dynamic Type■ Font descriptors■ Adding fonts
• Language tagging• Modifying fallbacks
![Page 3: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/3.jpg)
Text Kit WebKit
SynopsisWhat Is Text Kit?
Core Text
CoreGraphics
![Page 4: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/4.jpg)
Text Kit WebKit• Text Kit and Web Kit are built on Core Text
SynopsisWhat Is Text Kit?
Text Kit WebKit
Core Text
CoreGraphics
![Page 5: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/5.jpg)
Text Kit WebKit• Text Kit and Web Kit are built on Core Text
• Core Text is available for specialized tasks
SynopsisWhat Is Text Kit?
Text Kit WebKit
Core Text
CoreGraphics
Core Text
![Page 6: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/6.jpg)
Text Kit WebKit• Text Kit and Web Kit are built on Core Text
• Core Text is available for specialized tasks
• Unicode text layout■ String + Font = Glyphs
SynopsisWhat Is Text Kit?
Text Kit WebKit
Core Text
CoreGraphics
Core Text
![Page 7: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/7.jpg)
Specifying Fonts
![Page 8: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/8.jpg)
Which Font?
• Dynamic Type• System font• UIFontDescriptor• Adding fonts
![Page 9: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/9.jpg)
Dynamic Type
![Page 10: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/10.jpg)
Dynamic Type
![Page 11: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/11.jpg)
Dynamic Type
• Organized by usage• Optimized for legibility• User picks size
■ Auto Layout
![Page 12: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/12.jpg)
Text StylesSubhead comparison
Quo usque tandem abutere, Catilina, patientia nostra?
Quo usque tandem abutere,Catilina, patientia nostra?
Quo usque tandem abutere,Catilina, patientia nostra?
Quo usque tandem abutere,Catilina, patientia nostra?
Quo usque tandem abutere,Catilina, patientia nostra?
Quo usque tandem abutere,Catilina, patientia nostra?
Quo usque tandem abutere,Catilina, patientia nostra?
![Page 13: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/13.jpg)
Text StylesSubhead comparison
Quo usque tandem abutere,Catilina, patientia nostra?
Quo usque tandem abutere,Catilina, patientia nostra?
![Page 14: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/14.jpg)
Using Text Styles
+[UIFont preferredFontForTextStyle:]■ Styles in UIFontDescriptor documentation
• Can be modified with symbolic traits• CSS properties
■ Prefixed with -apple-system-
![Page 15: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/15.jpg)
System Fonts
• “Meta” fonts■ May change across releases (e.g., Lucida Grande)■ Hidden names start with ‘.’ (period)
• +[UIFont systemFontOfSize:] and friends■ Not for user content■ Only recompiled code will get new font on iOS 7
![Page 16: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/16.jpg)
UIFontDescriptor
• Describes a font• Access and modify font properties• List available fonts• Specify your own fonts
![Page 17: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/17.jpg)
Descriptor Basics
• Font attributes■ Names, size, traits, features, etc.
• Described font may not exist• Describe an actual font by matching on attributes
![Page 18: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/18.jpg)
Descriptor Matching
• Explicit matching-[UIFontDescriptor matchingFontDescriptorsWithMandatoryKeys:]
• Implicit matching-[UIFontDescriptor fontDescriptorWithSymbolicTraits:]-[UIFont fontWithDescriptor:size:]
![Page 19: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/19.jpg)
Family name matchingDescriptor Matching
UIFontDescriptor *helveticaNeueFamily = [UIFontDescriptor fontDescriptorWithFontAttributes: @{ UIFontDescriptorFamilyAttribute: @"Helvetica Neue" }];
NSArray *matches = [helveticaNeueFamily matchingFontDescriptorsWithMandatoryKeys: nil];
![Page 20: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/20.jpg)
Family name matchingDescriptor Matching
UIFontDescriptor *helveticaNeueFamily = [UIFontDescriptor fontDescriptorWithFontAttributes: @{ UIFontDescriptorFamilyAttribute: @"Helvetica Neue" }];
NSArray *matches = [helveticaNeueFamily matchingFontDescriptorsWithMandatoryKeys: nil];
![Page 21: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/21.jpg)
Family name matchingDescriptor Matching
UIFontDescriptor *helveticaNeueFamily = [UIFontDescriptor fontDescriptorWithFontAttributes: @{ UIFontDescriptorFamilyAttribute: @"Helvetica Neue" }];
NSArray *matches = [helveticaNeueFamily matchingFontDescriptorsWithMandatoryKeys: nil];
![Page 22: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/22.jpg)
Family name matchingDescriptor Matching
UIFontDescriptor *helveticaNeueFamily = [UIFontDescriptor fontDescriptorWithFontAttributes: @{ UIFontDescriptorFamilyAttribute: @"Helvetica Neue" }];
NSArray *matches = [helveticaNeueFamily matchingFontDescriptorsWithMandatoryKeys: nil];
HelveticaNeueHelveticaNeue-MediumHelveticaNeue-LightHelveticaNeue-Thin…
![Page 23: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/23.jpg)
Family name matchingDescriptor Matching
UIFontDescriptor *helveticaNeueFamily = [UIFontDescriptor fontDescriptorWithFontAttributes: @{ UIFontDescriptorFamilyAttribute: @"Helvetica Neue" }];
NSArray *matches = [helveticaNeueFamily matchingFontDescriptorsWithMandatoryKeys: nil];
![Page 24: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/24.jpg)
Text style emboldeningDescriptor Matching
UIFontDescriptor *fontDescriptor = [UIFontDescriptor preferredFontDescriptorWithTextStyle: UIFontTextStyleBody];
UIFontDescriptor *boldFontDescriptor = [fontDescriptor fontDescriptorWithSymbolicTraits: UIFontDescriptorTraitBold];
UIFont *boldFont = [UIFont fontWithDescriptor: boldFontDescriptor size: 0.0];
![Page 25: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/25.jpg)
Text style emboldeningDescriptor Matching
UIFontDescriptor *fontDescriptor = [UIFontDescriptor preferredFontDescriptorWithTextStyle: UIFontTextStyleBody];
UIFontDescriptor *boldFontDescriptor = [fontDescriptor fontDescriptorWithSymbolicTraits: UIFontDescriptorTraitBold];
UIFont *boldFont = [UIFont fontWithDescriptor: boldFontDescriptor size: 0.0];
![Page 26: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/26.jpg)
Text style emboldeningDescriptor Matching
UIFontDescriptor *fontDescriptor = [UIFontDescriptor preferredFontDescriptorWithTextStyle: UIFontTextStyleBody];
UIFontDescriptor *boldFontDescriptor = [fontDescriptor fontDescriptorWithSymbolicTraits: UIFontDescriptorTraitBold];
UIFont *boldFont = [UIFont fontWithDescriptor: boldFontDescriptor size: 0.0];
![Page 27: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/27.jpg)
Text style emboldeningDescriptor Matching
UIFontDescriptor *fontDescriptor = [UIFontDescriptor preferredFontDescriptorWithTextStyle: UIFontTextStyleBody];
UIFontDescriptor *boldFontDescriptor = [fontDescriptor fontDescriptorWithSymbolicTraits: UIFontDescriptorTraitBold];
UIFont *boldFont = [UIFont fontWithDescriptor: boldFontDescriptor size: 0.0];
![Page 28: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/28.jpg)
Text style emboldeningDescriptor Matching
UIFontDescriptor *fontDescriptor = [UIFontDescriptor preferredFontDescriptorWithTextStyle: UIFontTextStyleBody];
UIFontDescriptor *boldFontDescriptor = [fontDescriptor fontDescriptorWithSymbolicTraits: UIFontDescriptorTraitBold];
UIFont *boldFont = [UIFont fontWithDescriptor: boldFontDescriptor size: 0.0];
![Page 29: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/29.jpg)
Descriptor Serialization
• NSCoding protocol• Manual serialization-[UIFontDescriptor fontAttributes]
![Page 30: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/30.jpg)
Modifying a Font Instance
• Activate typographic featuresUIFontDescriptorFeatureSettingsAttribute
• Remove unwanted charactersUIFontDescriptorCharacterSetAttribute
![Page 31: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/31.jpg)
Modifying a Font InstanceTime appearance
11:15vs.
11:15
![Page 32: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/32.jpg)
Time appearanceModifying a Font Instance
NSArray *timeFeatureSettings = @[ @{ UIFontFeatureTypeIdentifierKey: @(kNumberSpacingType), UIFontFeatureSelectorIdentifierKey: @(kProportionalNumbersSelector) }, @{ UIFontFeatureTypeIdentifierKey: @(kCharacterAlternativesType), UIFontFeatureSelectorIdentifierKey: @(1) }];
UIFont *font = …;UIFontDescriptor *originalDescriptor = [font fontDescriptor];UIFontDescriptor *timeDescriptor = [originalDescriptor fontDescriptorByAddingAttributes: @{ UIFontDescriptorFeatureSettingsAttribute: timeFeatureSettings }];UIFont *timeFont = [UIFont fontWithDescriptor: timeDescriptor size: 0.0];
![Page 33: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/33.jpg)
Time appearanceModifying a Font Instance
NSArray *timeFeatureSettings = @[ @{ UIFontFeatureTypeIdentifierKey: @(kNumberSpacingType), UIFontFeatureSelectorIdentifierKey: @(kProportionalNumbersSelector) }, @{ UIFontFeatureTypeIdentifierKey: @(kCharacterAlternativesType), UIFontFeatureSelectorIdentifierKey: @(1) }];
UIFont *font = …;UIFontDescriptor *originalDescriptor = [font fontDescriptor];UIFontDescriptor *timeDescriptor = [originalDescriptor fontDescriptorByAddingAttributes: @{ UIFontDescriptorFeatureSettingsAttribute: timeFeatureSettings }];UIFont *timeFont = [UIFont fontWithDescriptor: timeDescriptor size: 0.0];
![Page 34: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/34.jpg)
Time appearanceModifying a Font Instance
NSArray *timeFeatureSettings = @[ @{ UIFontFeatureTypeIdentifierKey: @(kNumberSpacingType), UIFontFeatureSelectorIdentifierKey: @(kProportionalNumbersSelector) }, @{ UIFontFeatureTypeIdentifierKey: @(kCharacterAlternativesType), UIFontFeatureSelectorIdentifierKey: @(1) }];
UIFont *font = …;UIFontDescriptor *originalDescriptor = [font fontDescriptor];UIFontDescriptor *timeDescriptor = [originalDescriptor fontDescriptorByAddingAttributes: @{ UIFontDescriptorFeatureSettingsAttribute: timeFeatureSettings }];UIFont *timeFont = [UIFont fontWithDescriptor: timeDescriptor size: 0.0];
![Page 35: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/35.jpg)
Time appearanceModifying a Font Instance
NSArray *timeFeatureSettings = @[ @{ UIFontFeatureTypeIdentifierKey: @(kNumberSpacingType), UIFontFeatureSelectorIdentifierKey: @(kProportionalNumbersSelector) }, @{ UIFontFeatureTypeIdentifierKey: @(kCharacterAlternativesType), UIFontFeatureSelectorIdentifierKey: @(1) }];
UIFont *font = …;UIFontDescriptor *originalDescriptor = [font fontDescriptor];UIFontDescriptor *timeDescriptor = [originalDescriptor fontDescriptorByAddingAttributes: @{ UIFontDescriptorFeatureSettingsAttribute: timeFeatureSettings }];UIFont *timeFont = [UIFont fontWithDescriptor: timeDescriptor size: 0.0];
![Page 36: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/36.jpg)
Overly happy snowmanModifying a Font Instance
This ☃ isn’t my favorite
This ☃ is more sedate
vs.
![Page 37: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/37.jpg)
Overly happy snowmanModifying a Font Instance
UIFont *font = …;UIFontDescriptor *originalDescriptor = [font fontDescriptor];NSMutableCharacterSet *cset = [[originalDescriptor objectForKey: UIFontDescriptorCharacterSetAttribute] mutableCopy];[cset removeCharactersInRange: NSMakeRange(0x2603, 1)];
UIFontDescriptor *snowmanRemoved = [originalDescriptor fontDescriptorByAddingAttributes: @{ UIFontDescriptorCharacterSetAttribute: cset }];font = [UIFont fontWithDescriptor: snowmanRemoved size: 0.0];
![Page 38: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/38.jpg)
Overly happy snowmanModifying a Font Instance
UIFont *font = …;UIFontDescriptor *originalDescriptor = [font fontDescriptor];NSMutableCharacterSet *cset = [[originalDescriptor objectForKey: UIFontDescriptorCharacterSetAttribute] mutableCopy];[cset removeCharactersInRange: NSMakeRange(0x2603, 1)];
UIFontDescriptor *snowmanRemoved = [originalDescriptor fontDescriptorByAddingAttributes: @{ UIFontDescriptorCharacterSetAttribute: cset }];font = [UIFont fontWithDescriptor: snowmanRemoved size: 0.0];
![Page 39: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/39.jpg)
Overly happy snowmanModifying a Font Instance
UIFont *font = …;UIFontDescriptor *originalDescriptor = [font fontDescriptor];NSMutableCharacterSet *cset = [[originalDescriptor objectForKey: UIFontDescriptorCharacterSetAttribute] mutableCopy];[cset removeCharactersInRange: NSMakeRange(0x2603, 1)];
UIFontDescriptor *snowmanRemoved = [originalDescriptor fontDescriptorByAddingAttributes: @{ UIFontDescriptorCharacterSetAttribute: cset }];font = [UIFont fontWithDescriptor: snowmanRemoved size: 0.0];
![Page 40: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/40.jpg)
Overly happy snowmanModifying a Font Instance
UIFont *font = …;UIFontDescriptor *originalDescriptor = [font fontDescriptor];NSMutableCharacterSet *cset = [[originalDescriptor objectForKey: UIFontDescriptorCharacterSetAttribute] mutableCopy];[cset removeCharactersInRange: NSMakeRange(0x2603, 1)];
UIFontDescriptor *snowmanRemoved = [originalDescriptor fontDescriptorByAddingAttributes: @{ UIFontDescriptorCharacterSetAttribute: cset }];font = [UIFont fontWithDescriptor: snowmanRemoved size: 0.0];
![Page 41: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/41.jpg)
BYOFAdding Fonts
• Containers■ TTF, TTC■ OTF, OTC
• Formats■ Apple Advanced Typography (AAT)
■ iOS: ‘morx’ only (no ‘mort’)■ OpenType
■ Complex scripts (pre-Vista Indic)
![Page 42: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/42.jpg)
Adding Fonts
• Include in app bundle■ Automatically added using UIAppFonts Info.plist key
• Manually add■ Registered or unregistered
![Page 43: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/43.jpg)
RegisteredAdding Fonts
• Referenced by name—same as with installed fontsCTFontManagerRegisterFontsForURL()CTFontManagerRegisterFontsForURLs()CTFontManagerRegisterGraphicsFont()
![Page 44: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/44.jpg)
UnregisteredAdding Fonts
• Referenced by descriptor—use it or lose it■ Cannot be matched by name
CTFontManagerCreateFontDescriptorsFromURL()CTFontManagerCreateFontDescriptorFromData()
![Page 45: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/45.jpg)
Extra Credit
• Downloadable fonts■ All OS X fonts■ Additional international fonts
CTFontDescriptorCreateMatchingFontDescriptorsWithProgressHandler() + kCTFontDownloadableAttribute
• ProfileskCTFontManagerRegisteredFontsChangedNotification
![Page 46: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/46.jpg)
Language Tagging
![Page 47: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/47.jpg)
kCTLanguageAttributeName
• Override system language for localized behaviors■ Glyph substitution■ Line breaking■ Font fallbacks
![Page 48: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/48.jpg)
[[NSAttributedString alloc] initWithString: @"\u015F\u0163" attributes: @{ NSFontAttributeName: @"Verdana", (id)kCTLanguageAttributeName:
}];
Glyph substitutionkCTLanguageAttributeName
@"ro"
șț
@"en"
şţ
![Page 49: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/49.jpg)
[[NSAttributedString alloc] initWithString: @"…" attributes: @{ (id)kCTLanguageAttributeName:
}];
Line breakingkCTLanguageAttributeName
@"en"ビジネスを実行するオンラインアプリケーション
@"ja"ビジネスを実行するオンラインアプリケーション
![Page 50: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/50.jpg)
[[NSAttributedString alloc] initWithString: @"\u5203" attributes: @{ (id)kCTLanguageAttributeName:
}];
Font fallbackskCTLanguageAttributeName
@"ja"
刃@"zh-Hans"
刃
![Page 51: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/51.jpg)
Modifying Fallbacks
![Page 52: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/52.jpg)
Custom Cascade List
• UIFontDescriptorCascadeListAttribute• Inserted before standard fallbacks
![Page 53: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/53.jpg)
Specifying an Arabic fallback fontCustom Cascade List
apple: التّفّاحة
apple: التّفّاحةvs.
![Page 54: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/54.jpg)
Specifying an Arabic fallback fontCustom Cascade List
UIFontDescriptor *arabic = …;NSArray *cascadeList = @[ arabic ];
UIFont *font = …;UIFontDescriptor *originalDescriptor = [font fontDescriptor];UIFontDescriptor *cascadeListAdded = [originalDescriptor fontDescriptorByAddingAttributes: @{ UIFontDescriptorCascadeListAttribute: cascadeList }];font = [UIFont fontWithDescriptor: cascadeListAdded size: 0.0];
![Page 55: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/55.jpg)
Specifying an Arabic fallback fontCustom Cascade List
UIFontDescriptor *arabic = …;NSArray *cascadeList = @[ arabic ];
UIFont *font = …;UIFontDescriptor *originalDescriptor = [font fontDescriptor];UIFontDescriptor *cascadeListAdded = [originalDescriptor fontDescriptorByAddingAttributes: @{ UIFontDescriptorCascadeListAttribute: cascadeList }];font = [UIFont fontWithDescriptor: cascadeListAdded size: 0.0];
![Page 56: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/56.jpg)
Specifying an Arabic fallback fontCustom Cascade List
UIFontDescriptor *arabic = …;NSArray *cascadeList = @[ arabic ];
UIFont *font = …;UIFontDescriptor *originalDescriptor = [font fontDescriptor];UIFontDescriptor *cascadeListAdded = [originalDescriptor fontDescriptorByAddingAttributes: @{ UIFontDescriptorCascadeListAttribute: cascadeList }];font = [UIFont fontWithDescriptor: cascadeListAdded size: 0.0];
![Page 57: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/57.jpg)
Specifying an Arabic fallback fontCustom Cascade List
UIFontDescriptor *arabic = …;NSArray *cascadeList = @[ arabic ];
UIFont *font = …;UIFontDescriptor *originalDescriptor = [font fontDescriptor];UIFontDescriptor *cascadeListAdded = [originalDescriptor fontDescriptorByAddingAttributes: @{ UIFontDescriptorCascadeListAttribute: cascadeList }];font = [UIFont fontWithDescriptor: cascadeListAdded size: 0.0];
![Page 58: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/58.jpg)
More Information
Jake BehrensApp Frameworks [email protected]
Documentationhttp://developer.apple.com
Apple Developer Forumshttp://devforums.apple.com
![Page 59: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/59.jpg)
Related Sessions
Introduction to Text Kit PresidioWednesday 2:00PM
Advanced Text Layouts and Effects with Text Kit MissionThursday 2:00PM
![Page 60: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/60.jpg)
Summary
• Text styles on iOS 7■ Use Auto Layout or otherwise adapt to font and size changes
• Language tagging■ Override system language for known content
• Modifying fallbacks■ Insert descriptors prior to default fallbacks
![Page 61: Using Fonts with Text Kit - Apple Inc. · Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina, patientia nostra? Quo usque tandem abutere, Catilina,](https://reader030.fdocuments.us/reader030/viewer/2022040819/5e65c20adbfdf5138c13e844/html5/thumbnails/61.jpg)