Hoe krijg ik de naam van het lettertype uit een otf- of ttf-bestand?

Ik heb een aangepast lettertype gebruikt in mijn vorige app.

De bestandsnaam was “ProximaNova-Regular.otf” en om het lettertype te laden dat ik zojuist heb gebruikt…

[UIFont fontWithName:@"ProximaNova-Regular" size:20];

Dit werkte perfect.

In deze nieuwe app heb ik nu drie lettertypebestanden…

Dude_Willie.otf
Impact
handsean.ttf

Maar ik weet niet zeker hoe ik deze moet laden.

Ik heb het geprobeerd

[UIFont fontWithName:<the file name> size:20];

Maar dit valt gewoon terug op het gebruik van Helvetica.

Hoe vind ik welke naam ik moet gebruiken?


Antwoord 1, autoriteit 100%

Klik met de rechtermuisknop op de TTF -> Informatie opvragen

“Volledige naam” is wat u zoekt.

Dat is wat voor mij werkte met TTF’s.

Bewerken:

Ik heb zojuist een lettertype gebruikt dat een andere naam had dan de “Volledige naam” in Info ophalen.

Voor de compilatie van dit antwoord, als de snelle controle hierboven niet werkt, voert u deze code uit in uw project:

for (NSString *fontFamilyName in [UIFont familyNames]) {
    for (NSString *fontName in [UIFont fontNamesForFamilyName:fontFamilyName]) {
        NSLog(@"Family: %@    Font: %@", fontFamilyName, fontName);
    }
}

En zoek naar de juiste naam van het lettertype dat je wilt gebruiken.

Swift 3.0-code:

for fontFamilyName in UIFont.familyNames{
    for fontName in UIFont.fontNames(forFamilyName: fontFamilyName){
        print("Family: \(fontFamilyName)     Font: \(fontName)")
    }
}

Antwoord 2, autoriteit 77%

Volg deze vier eenvoudige stappen om een ​​nieuw lettertype toe te voegen en te gebruiken in uw iOS-app:

  • Voeg your_new_font.ttfof your_new_font.otftoe aan uw Xcode-project
  • Voeg in de info.plist van uw project een nieuw item toe voor your_new_font.ttfof your_new_font.otfaan de UIAppFontsarray (platte tekst voor deze is ‘Lettertypen geleverd door applicatie’)
  • Op dit moment raad ik aan om dit tijdelijke stuk foutopsporingscode toe te voegen om alle lettertypen te dumpen die toegankelijk zijn voor je app, inclusief je nieuw toegevoegde your_new_font:

//Swift

   for family: String in UIFont.familyNames {
        print("\(family)")
        for names: String in UIFont.fontNames(forFamilyName: family) {
            print("== \(names)")
        }
    }

//Objective-c

for(NSString *fontfamilyname in [UIFont familyNames]) {
    NSLog(@"family:'%@'",fontfamilyname);
    for(NSString *fontName in [UIFont fontNamesForFamilyName:fontfamilyname]) {
        NSLog(@"\tfont:'%@'",fontName);
    }
    NSLog(@"-------------");
}
  • Zoek in de foutopsporingsuitvoer naar de naam ‘familie’ en ‘lettertype’ van uw nieuwe lettertype. Geef wat wordt weergegeven als de ‘lettertype’-naam die overeenkomt met uw nieuwe lettertypefamilie (er kan meer dan één ‘lettertype’ zijn gekoppeld aan uw nieuwe lettertypefamilie’) door aan UIFont *myNewFont = [UIFont fontWithName:@"font_name_from_debug_output" size:20]en je zou zaken moeten doen!

Antwoord 3, autoriteit 59%

  • Installeer het lettertype
  • Open de Font Book-app op je Mac
  • Selecteer het lettertype en klik op de knop ‘info’
  • De naam die u zoekt is PostScript-naam
    • MacOS: Bekijk -> Lettertype-info weergeven


Antwoord 4, autoriteit 6%

Als u de lettertypenaam voor een bepaald lettertypebestand programmatisch wilt vinden:

import Foundation
func loadFontName(for file: URL) throws -> String {
    let data = try Data(contentsOf: file)
    guard let provider = CGDataProvider(data: data as CFData) else {
        throw Error("Could not create data provider")
    }
    guard let font = CGFont(provider) else {
        throw Error("Could not load font")
    }
    guard let name = font.postScriptName else {
        throw Error("Could not get font name from font file")
    }
    return name as String
}

Vervang indien nodig door uw eigen werpbare Error-objecten.


Antwoord 5, autoriteit 5%

U wilt weten hoe u hiervoor een naam kunt krijgen:-

 NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]];
  for (NSInteger indFamily=0; indFamily<[familyNames count]; ++indFamily) 
  {
        NSLog(@"Family name: %@", [familyNames objectAtIndex:indFamily]);
        NSArray *fontNames = [[NSArray alloc] initWithArray:
              [UIFont fontNamesForFamilyName:[familyNames objectAtIndex:indFamily]]];
        for (NSInteger indFont=0; indFont<[fontNames count]; ++indFont) 
        {
              NSLog(@"    Font name: %@", [fontNames objectAtIndex:indFont]);
        }
  }

ik hoop dat het je helpt…


Antwoord 6, autoriteit 5%

Swift 4.0+oplossing

   for fontFamilyName in UIFont.familyNames {
        print("family: \(fontFamilyName)\n")
        for fontName in UIFont.fontNames(forFamilyName: fontFamilyName) {
            print("font: \(fontName)")
        }
    }

Zal uitvoeren:

familie: Apple SD Gothic Neo

font: AppleSDGothicNeo-Thin

font: AppleSDGothicNeo-Light


Antwoord 7, autoriteit 4%

Swift 3.0

for familyName in UIFont.familyNames {
        for fontName in UIFont.fontNames(forFamilyName: familyName ) {
            print("\(familyName) : \(fontName)")
        }
    }

Antwoord 8, autoriteit 3%

Nadat je je lettertypen aan je project/app hebt toegevoegd, voeg je deze code toe (waarschijnlijk alleen in de methode didFinishLaunchingWithOptions van app-afgevaardigde) om alle beschikbare lettertypen voor je app af te drukken. Vanuit die lijst zou je het lettertype moeten kunnen identificeren dat je zoekt. Vergeet daarna niet de onnodige code te verwijderen.

for (NSString *fontFamilyName in [UIFont familyNames]) {
    for (NSString *fontName in [UIFont fontNamesForFamilyName:fontFamilyName]) {
        NSLog(@"Family: %@    Font: %@", fontFamilyName, fontName);
    }
}

Antwoord 9, autoriteit 3%

Je kunt ook otfinfo –info arial.ttf gebruiken om de naam van de opdrachtregel te halen. De naam van het postscript is degene die u moet doorgeven aan de UIFont-constructor.


Antwoord 10, autoriteit 2%

Swift 1.2:

   for familyName in UIFont.familyNames() {
        for fontName in UIFont.fontNamesForFamilyName(familyName as! String) {
            println("\(familyName) : \(fontName)")
        }
    }

Antwoord 11, autoriteit 2%

Een andere “snelle, praktische” hack waarbij je niet alle standaardlettertypen op de emulator of het apparaat hoeft te scannen, is om het lettertype te gebruiken voor iets in je storyboard. Als u vervolgens het storyboard bewerkt met een teksteditor (open als source code), kunt u de lettertypen zien die worden gebruikt met “interne” namen als u zoekt naar de “customFonts”-tag:

<customFonts key="customFonts">
    <array key="Linotype - AvenirNextLTPro-Bold.otf">
        <string>AvenirNextLTPro-Bold</string>
    </array>
    <array key="Linotype - AvenirNextLTPro-Regular.otf">
        <string>AvenirNextLTPro-Regular</string>
    </array>
    <array key="TradeGothicLTPro-BdCn20.otf">
        <string>TradeGothicLTPro-BdCn20</string>
    </array>
</customFonts>

Antwoord 12

Log de familienamen van het lettertypebestand in en open vervolgens de lettertypen:

// You can log all font family names suing **fontNamesForFamilyName**
NSLog(@" font name %@", [UIFont fontNamesForFamilyName:@"the file name"]);

Ik hoop dat het je helpt.


Antwoord 13

Lettertypenamen en families voor macOSweergeven met Swift 4.1:

NSFontManager.shared.availableFonts.map { print($0) }
NSFontManager.shared.availableFontFamilies.map { print($0) }

Antwoord 14

Swift 4.0 ondersteund

Dit is slechts één regelcode voor het afdrukken van alle lettertypefamilies en de namen van de lettertypen

override func viewDidLoad() {
    super.viewDidLoad()
    //Main line of code
    UIFont.familyNames.sorted().forEach({ print($0); UIFont.fontNames(forFamilyName: $0 as String).forEach({print($0)})})
}

Other episodes