it-swarm.com.de

Wie erhalte ich den Namen der Schriftart aus einer otf- oder ttf-Datei?

Ich habe in meiner vorherigen App eine benutzerdefinierte Schriftart verwendet.

Der Dateiname war "ProximaNova-Regular.otf" und zum Laden der gerade verwendeten Schriftart ...

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

Das hat perfekt funktioniert.

Jetzt habe ich in dieser neuen App drei Fontdateien ...

Dude_Willie.otf
Impact
handsean.ttf

Aber ich bin nicht sicher, wie ich diese laden soll.

Ich habe versucht

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

Dies gilt jedoch nur für Helvetica.

Wie finde ich den zu verwendenden Namen?

64
Fogmeister

Führen Sie die folgenden vier einfachen Schritte aus, um eine neue Schriftart in Ihrer iOS-App hinzuzufügen und zu verwenden:

  • Fügen Sie your_new_font.ttf oder your_new_font.otf zu Ihrem Xcode-Projekt hinzu
  • Fügen Sie in der info.plist Ihres Projekts einen neuen Eintrag für your_new_font.ttf oder your_new_font.otf zum UIAppFonts-Array hinzu (Klartext für dieses Feld ist 'Von der Anwendung bereitgestellte Schriftarten').
  • An dieser Stelle empfehle ich, diesen temporären Teil des Debug-Codes hinzuzufügen, um alle von Ihrer App verfügbaren Schriften zu sichern, einschließlich Ihres neu hinzugefügten your_new_font:
for(NSString *fontfamilyname in [UIFont familyNames])
{
    NSLog(@"family:'%@'",fontfamilyname);
    for(NSString *fontName in [UIFont fontNamesForFamilyName:fontfamilyname])
    {
        NSLog(@"\tfont:'%@'",fontName);
    }
    NSLog(@"-------------");
}
  • Suchen Sie in der Debug-Ausgabe nach dem Namen der Familie und der Schriftart Ihrer neuen Schriftart. Übergeben Sie den Namen der Schriftart, die Ihrer neuen Schriftfamilie entspricht (es könnte mehr als eine mit Ihrer neuen Schriftfamilie verknüpfte Schrift sein) an UIFont *myNewFont = [UIFont fontWithName:@"font_name_from_debug_output" size:20] und Sie sollten im Geschäft sein!
55
John Jacecko

Klicken Sie mit der rechten Maustaste auf TTF -> Get Info

"Full Name" ist das, wonach Sie suchen.

Das hat bei TTFs für mich funktioniert.

Bearbeiten:

Ich habe nur eine Schriftart verwendet, die einen anderen Namen als "Vollständiger Name" in "Get Info" hatte.

Um diese Antwort zu kompilieren, führen Sie den folgenden Code in Ihrem Projekt aus, wenn die oben beschriebene Schnellüberprüfung nicht funktioniert

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

Suchen Sie nach dem korrekten Namen der Schriftart, die Sie verwenden möchten.

Swift 3.0 Code:

for fontFamilyName in UIFont.familyNames{
    for fontName in UIFont.fontNames(forFamilyName: fontFamilyName){
        print("Family: \(fontFamilyName)     Font: \(fontName)")
    }
}
114
Segev
  • Installieren Sie die Schrift 
  • Öffnen Sie die Font Book-App auf Ihrem Mac 
  • Wählen Sie die Schriftart aus und klicken Sie auf die Schaltfläche "Info" 
  • Der Name, den Sie suchen, ist PostScript-Name

 example

33
Elin Gersin

Um Schriftarten unter iOS verwenden zu können, müssen Sie die Schrift basierend auf dem FULL NAME (PostScript-Name)) der Schriftart laden. Dies ist manchmal (und normalerweise) anders als die tatsächliche Schriftart FILE NAME.

Stellen Sie sich vor, Sie benennen die Font-Datei "Arial-regular.ttf" in .__ um. "foo.ttf". Die in der gerade umbenannten Schriftartdatei enthaltene Schriftart ist immer noch "Arial-regulär".

Es gibt einige gute programmatische Methoden, um den Namen der Schriftart bereits in diesem Thread zu erhalten, aber ich habe einen anderen Ansatz, wenn ich die Befehlszeile benutze.

Wenn Sie einen Mac oder Linux verwenden, führen Sie dieses Skript einfach über die Befehlszeile in dem Verzeichnis aus, in dem sich Ihre benutzerdefinierten Schriftarten befinden (verwendet das fc-scan-Dienstprogramm aus fontconfig , das möglicherweise bereits installiert ist. Wenn nicht, können Sie es installieren via Homebrew: brew install fontconfig):

for file in "$arg"*.{ttf,otf}; do fc-scan --format "%{postscriptname}\n" $file; done

Hier ist ein Screenshot des obigen Befehls, der in meinem ~/Library/Fonts-Verzeichnis ausgeführt wird:

 enter image description here

Das obige Skript führt alle .ttf- und .otf-Dateien im aktuellen Verzeichnis durch und gibt dann PostScript-Name für jede Schriftart aus, mit der Sie auf die Schriftartdatei in XCode oder anderswo verweisen können.

Wenn Sie mit einigen zusätzlichen Informationen (PostScriptName, Dateiname) und einigen Farbcodierungen ausgehen möchten, können Sie dieses alternative Skript ausführen:

for file in "$arg"*.{ttf,otf}; do 
    postscriptname=$(fc-scan --format "%{postscriptname}\n" $file);
    printf "\033[36m PostScript Name:\033[0m %s \e[90m(%s)\033[0m\n" "$postscriptname" "$file";
done

 enter image description here

Dies ist etwas schneller als das Einfügen von Code in Ihre AppDelegate.m-Datei, um die Namen jedes Mal auszudrucken, wenn Sie eine neue Schriftartdatei hinzufügen möchten. Dies ist die beliebte Methode. Sie ist auch schneller als das Öffnen der Schriftart in FontBook Überprüfen Sie den PostScript-Namen.

USEFUL TIP: Wenn Sie das obige Skript in Ihrem Terminal als Aliasnamen verwenden, müssen Sie nur einen einzigen Befehl eingeben, um alle PostScript-Schriftartnamen für alle Dateien im aktuellen Verzeichnis abzurufen (meine Funktion wird aufgerufen fontnames Alles was ich tun muss, ist, fontnames am Terminal in das Verzeichnis mit den darin enthaltenen Schriften einzugeben. Die PostScript-Namen werden automatisch gedruckt. Dann sparen Sie Zeit in Ihrem Entwicklungsworkflow und haben dieses praktische Skript bei Bedarf zur Verfügung es.

Hoffe das hilft!

31
radiovisual

Sie möchten wissen, wie Sie diesen Namen erhalten: -

  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]);
        }
  }

hoffe es hilft dir ...

6

Swift 3.0

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

Nachdem Sie Ihre Zeichensätze zu Ihrem Projekt/Ihrer Anwendung hinzugefügt haben, fügen Sie diesen Code hinzu (wahrscheinlich nur in der App-Delegatenmethode didFinishLaunchingWithOptions), um alle für Ihre Anwendung verfügbaren Schriftarten auszudrucken. In dieser Liste sollten Sie in der Lage sein, die Schriftart zu identifizieren, nach der Sie suchen. Vergessen Sie nicht, den nicht benötigten Code anschließend zu entfernen.

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

Schnell 1,2:

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

Swift 4.0+ Lösung

    for fontFamilyName in UIFont.familyNames {
        print("family: \(fontFamilyName)\n")

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

Wird ausgegeben:

familie: Apple SD Gothic Neo

schriftart: AppleSDGothicNeo-Thin

schriftart: AppleSDGothicNeo-Light

3
JaredH

Sie können auch otfinfo --info arial.ttf verwenden, um den Namen von der Befehlszeile abzurufen. Der Postscript-Name ist der, den Sie an den UIFont-Konstruktor übergeben müssen.

2
Moritz

Wenn Sie den Namen der Schriftart für eine bestimmte Schriftartdatei programmgesteuert suchen möchten:

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
}

Ersetzen Sie bei Bedarf durch Ihre eigenen auswerfbaren Error-Objekte.

2
Robert

Protokollieren Sie familyNames der Schriftdatei und greifen Sie auf die Schriftarten zu:

// You can log all font family names suing **fontNamesForFamilyName**

NSLog(@" font name %@", [UIFont fontNamesForFamilyName:@"the file name"]);

Ich hoffe es hilft dir.

1
Nishant Tyagi

Ein weiterer "schneller, praktischer" Hack, der nicht das Durchsuchen aller auf dem Emulator oder dem Gerät vorhandenen Standardschriftarten beinhaltet, ist die Verwendung der Schriftart für etwas in Ihrem Storyboard. Wenn Sie dann das Storyboard mit einem Texteditor bearbeiten, können Sie die mit "internen" Namen verwendeten Schriften sehen, wenn Sie nach dem Tag "customFonts" suchen:

<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>
1
Kaolin Fire

Listet die Namen und Familien der Fonts für macOS mit Swift 4.1 auf:

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