792 Stimmen

Kann ich eine benutzerdefinierte Schriftart in ein iPhone-Programm einbetten?

Ich möchte, dass eine Anwendung eine benutzerdefinierte Schriftart für das Rendern von Text, laden Sie es, und verwenden Sie es dann mit Standard UIKit Elemente wie UILabel . Ist dies möglich?

5 Stimmen

In einer der CS193p-Vorlesungen (iPhone Application Development) in Stanford stellte Evan fest, dass die Installation einer eigenen Schriftart auf einem Gerät "eine Menge Arbeit" ist, was zumindest bedeutet, dass es möglich ist :-)

2 Stimmen

IPhone 3.2 erlaubt benutzerdefinierte Schriftarten, aber nur für das iPad (siehe Antwort unten)

6 Stimmen

Am Ende habe ich Bilder verwendet.

5voto

RichX Punkte 485

Eine bessere Lösung ist das Hinzufügen einer neuen Eigenschaft " Fonts provided by application " zu Ihrem info.plist Datei.

Dann können Sie Ihre benutzerdefinierte Schriftart wie gewohnt verwenden UIFont .

5voto

Jarson Punkte 121

Für iOS 3.2 und höher: Verwenden Sie die Methoden, die von mehreren oben, die sind:

  1. Fügen Sie Ihre Schriftartdatei hinzu (z. B., Chalkduster.ttf ) in den Ordner Resources des Projekts in XCode.
  2. Öffnen Sie info.plist und fügen Sie einen neuen Schlüssel namens UIAppFonts hinzu. Der Typ dieses Schlüssels sollte Array sein.
  3. Fügen Sie den Namen Ihrer benutzerdefinierten Schriftart in dieses Array ein, einschließlich der Erweiterung (" Chalkduster.ttf ").
  4. Utilice [UIFont fontWithName:@"Real Font Name" size:16] in Ihrer Bewerbung.

BUT Der "echte Schriftname" ist nicht immer der, den Sie in Fontbook sehen. Am besten fragen Sie Ihr Gerät, welche Schriftarten es sieht und wie die genauen Namen lauten.

Ich verwende den uifont-name-grabber, der unter www. uifont.com zu finden ist: uifont-name-grabber

Fügen Sie einfach die gewünschten Schriftarten in das xcode-Projekt ein, fügen Sie den Dateinamen zu seiner plist hinzu, und führen Sie es auf dem Gerät aus, für das Sie bauen. UIFont fontWithName: erwartet.

5voto

Matt Sephton Punkte 2935

Nachschlagen ATSApplicationFontsPath

Ein einfacher plist-Eintrag, der es Ihnen ermöglicht, die Schriftartdatei(en) in den Ressourcen-Ordner Ihrer Anwendung aufzunehmen, so dass sie in Ihrer Anwendung "einfach funktionieren".

0 Stimmen

Haben Sie dies am Gerät ausprobiert? Ich hatte kein Glück, und Googeln deutet darauf hin, dass dieser Plist-Eintrag auf dem iPhone nicht unterstützt wird, obwohl er für das iPhone OS dokumentiert ist.

1 Stimmen

Tut mir leid, ich verwende es im Moment nur in einer OS X-Anwendung.

3voto

David M. Punkte 3657

Ab iOS 4.1 gibt es eine neue Möglichkeit, benutzerdefinierte Schriftarten zu verwenden. Sie ermöglicht es Ihnen, Schriften dynamisch zu laden, sei es aus Dateien, die in der App enthalten sind, aus heruntergeladenen Daten, oder was auch immer. Außerdem können Sie Schriftarten laden, wenn Sie sie brauchen, während die alte Methode sie alle beim Start der App lädt, was zu lange dauern kann, wenn Sie viele Schriftarten haben.

Die neue Methode wird beschrieben unter ios-dynamic-font-loading

Sie verwenden die CTFontManagerRegisterGraphicsFont Funktion und übergibt ihr einen Puffer mit Ihren Schriftdaten. Dieser ist dann verfügbar für UIFont und Webansichten, genau wie bei der alten Methode. Hier ist der Beispielcode aus diesem Link:

NSData *inData = /* your font-file data */;
CFErrorRef error;
CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)inData);
CGFontRef font = CGFontCreateWithDataProvider(provider);
if (! CTFontManagerRegisterGraphicsFont(font, &error)) {
    CFStringRef errorDescription = CFErrorCopyDescription(error)
    NSLog(@"Failed to load font: %@", errorDescription);
    CFRelease(errorDescription);
}
CFRelease(font);
CFRelease(provider);

0 Stimmen

Ich habe diesen Code verwendet, erhalte aber die Meldung &error Failed to load font: Der Vorgang konnte nicht abgeschlossen werden. (com.apple.coretext error 105 - Konnte die CGFont '<CGFont (0x14fe7df0): Shruti>')

0 Stimmen

Gemäß der Dokumentation ist der Fehler 105 kCTFontManagerErrorAlreadyRegistered "Die Datei wurde bereits im angegebenen Bereich registriert." developer.apple.com/library/ios/#documentation/Carbon/Reference/

3voto

Daniel Krom Punkte 9153

Swift, code way: (funktioniert auch mit swift 2.0)

Fügen Sie die erforderlichen Schriftarten zu Ihrem Projekt hinzu (genau wie beim Hinzufügen von Bildern, ziehen Sie sie einfach in Xcode) und stellen Sie sicher, dass sie auf Ihr Projekt ausgerichtet sind.
diese Methode hinzufügen und benutzerdefinierte Schriftarten laden (empfohlen in appDelegate didFinishLaunchingWithOptions )

func loadFont(filePath: String) {

    let fontData = NSData(contentsOfFile: filePath)!

    let dataProvider = CGDataProviderCreateWithCFData(fontData)
    let cgFont = CGFontCreateWithDataProvider(dataProvider)!

    var error: Unmanaged<CFError>?
    if !CTFontManagerRegisterGraphicsFont(cgFont, &error) {
        let errorDescription: CFStringRef = CFErrorCopyDescription(error!.takeUnretainedValue())
        print("Unable to load font: %@", errorDescription, terminator: "")
    }

}

Beispiel verwenden:

if let fontPath = NSBundle.mainBundle().pathForResource("My-Font", ofType: "ttf"){
      loadFont(fontPath)
}

Verwenden Sie die Schriftart:

UIFont(name: "My-Font", size: 16.5)

0 Stimmen

Nur wundern, wie kommen Sie nicht nur die Schriftart in Ihre Info.plist hinzufügen scheint wie eine Menge mehr Arbeit für im Wesentlichen die gleiche Sache.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X