Benutzerdefinierte Schriftarten in iOS 7

102

Ich entwickle ein Spiel und möchte eine benutzerdefinierte Schriftart in meiner App verwenden. Ich benutze SpriteKit dafür, wenn das wichtig ist. Ich habe versucht, diese https://github.com/deni2s/IBCustomFonts zu verwenden, aber ich kann sie nicht mit dieser Schriftart http://www.fontspace.com/freaky-fonts/emulogic zum Laufen bringen

Ich habe verschiedene Dinge ausprobiert und die Schriftart in der info.plist der App registriert ... Weiß jemand, was los ist?

José María
quelle
Sind Sie sicher, dass Sie den richtigen Namen für die Schriftart verwenden, wenn Sie sie in Ihrem Code verwenden?
Nick
1
Dieser Blog kann für Sie hilfreich sein codewithchris.com/…
Xu Yin

Antworten:

277

Zunächst gehe ich davon aus, dass SpriteKit keinen Unterschied macht.

  1. Sie müssen Ihre Schriftart in .otf oder .ttf in Ihr Projekt kopieren. Zum Beispiel in Unterstützende Dateien.
  2. Sie müssen die .plist- Datei bearbeiten . Fügen Sie der Liste den Schlüssel "Von der Anwendung bereitgestellte Schriftarten" hinzu und kopieren Sie in Element 0 den genauen Dateinamen der Schriftart, die Sie in die Erweiterung "Unterstützende Dateien MIT" kopiert haben. Zum Beispiel: "JosefinSansStd-Light_0.otf"
  3. Stellen Sie sicher, dass die in Ihre App importierte Schriftart in die App selbst gepackt wird. Wählen Sie dazu Ihr Ziel aus , dann Phasen erstellen und dann Bundle-Ressourcen kopieren . Wenn Sie Ihre Schriftart dort nicht sehen, ziehen Sie sie aus den unterstützenden Dateien .

Schließlich möchten Sie alle Ihre Schriftarten auflisten, wenn die App gestartet wird, um nur den verwendbaren Namen für Ihre Schriftart zu sehen. Sie werden das mit diesem kleinen Code tun:

NSArray *fontFamilies = [UIFont familyNames];
for (int i = 0; i < [fontFamilies count]; i++)
{
    NSString *fontFamily = [fontFamilies objectAtIndex:i];
    NSArray *fontNames = [UIFont fontNamesForFamilyName:[fontFamilies objectAtIndex:i]];
    NSLog (@"%@: %@", fontFamily, fontNames);
}

Suchen Sie in gedruckten Ergebnissen nach Ihrer Schriftart. Ich würde beispielsweise nach "Josefin" suchen und feststellen, dass der tatsächliche Schriftartname "JosefinSansStd-Light" lautet. Danach müssen Sie diese Schriftart nur noch verwenden von:

UIFont *customFont = [UIFont fontWithName:@"JosefinSansStd-Light" size:20];

In iOS8 fügen Sie Ihre Schriftarten direkt zum Projekt hinzu und sie werden im Interface Builder angezeigt . Ändern Sie Ihren Code, um dies zu berücksichtigen, stellen Sie jedoch die Schriftart für iOS7 programmgesteuert ein und wählen Sie sie im xCode6 Interface Builder aus. PS. Der Interface Builder in xCode6 gibt Ihnen den richtigen Schriftnamen, den Sie kopieren und in den folgenden Code einfügen können.

#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

 if(SYSTEM_VERSION_LESS_THAN(@"8.0"))
    {
        UIFont *customFont = [UIFont fontWithName:@"OpenSans-Light" size:32];
        self.registerLabel.font = customFont;  
    }

Hoffe das hilft, Prost.

jovanjovanovic
quelle
Vielen Dank! Ich habe es verstanden! Das Problem war, dass ich es nicht zu den unterstützenden Dateien hinzufügen wollte, also wurde es nicht geladen: P
José María
1
Ich musste den Plist-Schlüssel vonUIAppFonts
Mike Flynn
1
Ich habe meine App, das gesamte Projekt von iOS7 / Xcode 5.1.1, in ein iOS8 / Xcode 6.0-Projekt neu erstellt. Die benutzerdefinierte Schriftart wurde erst angezeigt, als ich den 2. Schritt ausgeführt habe. Gr8 Erklärung!
MB_iOSDeveloper
1
Der gleiche Code zum let fontFamilies = UIFont.familyNames() for familyName in fontFamilies { let fontNames = UIFont.fontNamesForFamilyName(familyName as String) println("\(familyName): \(fontNames)") }
Abrufen von
1
Ein schneller Code zum Drucken aller Schriftnamen:for name in UIFont.familyNames() { debugPrint(UIFont.fontNamesForFamilyName(name)) }
Gimenete
24

Kein Problem, benutzerdefinierte Schriftarten zu verwenden, ich habe es getan. Folge diesen Schritten:

  1. Registrieren Sie die Schriftart in Ihrer info.plist und fügen Sie den Eintrag "Von der Anwendung bereitgestellte Schriftarten" hinzu. Geben Sie den Namen der Schriftartdatei ein, nicht den Namen der Schriftart. Wie font.ttf (ich denke, du hast das schon getan)
  2. Gehen Sie im Projektnavigator zu Ihrem Projekt, klicken Sie auf den Projektnamen und gehen Sie zu "Erstellungsphasen". Schauen Sie dann unter "Bundle-Ressourcen kopieren" nach unten. Es gibt viele Dateien und suchen Sie nach dem "+" - Zeichen. Ein Popup-Fenster mit Ihren Projektdateien wird geöffnet. Suchen Sie nach Ihrer Schriftartdatei und fügen Sie sie dem Bundle hinzu.
  3. Überprüfen Sie abschließend den Schriftnamen. Wenn Sie es in Ihrem Code verwenden, müssen Sie den Schriftnamen und nicht den Dateinamen verwenden. Um den Namen der Schriftart zu erfahren, doppelklicken Sie im Finder auf die Schriftartdatei. Ein Fenster mit der Schriftart wird geöffnet. Überprüfen Sie den Fenstertitel, das ist der Name der Schriftart, die Sie verwenden müssen.

Und Ratschläge, fügen Sie diesen Namen als Makro in Ihre ..Prefix.pch-Datei ein. Es ist einfacher, es in Ihrem Projekt zu verwenden, wenn Sie die Schriftart mehrmals verwenden müssen.

Das Problem, das Sie meiner Meinung nach hatten, ist, dass Sie die Schriftart ordnungsgemäß registriert haben, sie jedoch nicht in das App-Bundle kopiert wurde. Als die App ausgeführt wurde, konnte sie die Schriftart nicht finden. Deshalb ist Schritt 2 wichtig. Ich habe viel Zeit damit verbracht, das beim ersten Mal herauszufinden :)

zago
quelle
2
Der Schlüssel für mich war der Titel der Schrift. Vielen Dank!
Oscar
20

Um dies schnell zu erreichen

Wenn Sie alle Ihre Schriftarten auflisten möchten, wenn die App startet, sehen Sie nur den verwendbaren Namen für Ihre Schriftart. Sie können das mit diesem kleinen Code tun:

    UIFont.familyNames.forEach {
        print("fontFamily: \($0), fonts: \(UIFont.fontNames(forFamilyName: $0))")
    }
Toye
quelle
oder mitUIFont.familyNames.forEach { print("fontFamily: \($0), fonts: \(UIFont.fontNames(forFamilyName: $0))") }
Daniel
5

Ich war noch nie in der Lage, diese Antworten auf die Arbeit zu bringen, nachdem ich es mehrmals versucht hatte. Die einzige Möglichkeit, eine benutzerdefinierte Schriftart zu erhalten, um den Anweisungen in der akzeptierten Antwort zu folgen und dann ein verstecktes Etikett im Storyboard zu erstellen, das die Schriftart verwendet. Ich kann die Schriftart programmgesteuert verwenden. Seltsam und hackig, ich weiß, aber es hat bei mir funktioniert.

Stuart Clark
quelle
1
du bist genau richtig Ich habe mir in vielen Tutorials alles angesehen, einschließlich der Liste, dem Häkchen für das Ziel des Projekts, den Erstellungsphasen und schließlich den richtigen Namen für die Schriftfamilie gefunden, aber es würde immer noch nicht funktionieren. Dann habe ich ein verstecktes Etikett hinzugefügt, wie Sie sagen, und schließlich ist es aufgetaucht. Ich benutze Xcode 7.2 und es muss ein Fehler sein.
DrZ214
3

Wenn Sie in Xcode 6 sind, ist es so einfach wie es nur geht. Fügen Sie einfach einen fontOrdner in Ihr Projekt ein, fügen Sie Ihre Schriftart (en) in den Ordner ein und los geht's.

Geben Sie hier die Bildbeschreibung ein

Idris
quelle
7
Stellen Sie sicher, dass Sie es auch Ihrem beabsichtigten Ziel hinzufügen. Hinterhältiger Hobbit Xcode.
Matt Parkins
3

Wenn keine der oben genannten Methoden für Sie funktioniert hat UND Sie Ihre benutzerdefinierte Schriftart nur "programmgesteuert" verwenden (dh Sie haben sie in keinem xib verwendet), müssen Sie sie mindestens einmal irgendwo in einem xib irgendwo verwenden .

(PS Stuart Clark - hat dies bereits beantwortet, also bitte keine Gutschrift für mich. Ich habe mich jedoch entschlossen, es neu zu formulieren und als separate Antwort zu veröffentlichen, da ich seine Antwort verpasst habe. Es war mir nicht klar, als ich sie las. Ich fand Ich habe diese Lösung zufällig getestet, als ich die benutzerdefinierte Schriftart in einer XIB getestet habe und festgestellt habe, dass sie an anderer Stelle programmgesteuert funktioniert. Als ich die Schriftart aus der XIB entfernt habe, hat sie programmgesteuert nicht mehr funktioniert.)

Wojtek
quelle
2

Aktualisiert für Swift 3.

let fontFamilies:[String] = UIFont.familyNames

for fontFamily: String in fontFamilies {
    let fontNames: [String] = UIFont.fontNames(forFamilyName: fontFamily)
    print("\(fontFamily)  \(fontNames)");
}
Gavin Williams
quelle
0

Vielleicht eine schnelle Lösung - das hat es für mich getan, wenn die Schriftart bereits funktioniert hat, aber ein neues zB Label hat die gewünschte Schriftart nicht angezeigt:

sauberer, gründlicher und leerer abgeleiteter Datenordner.

Brainstray
quelle
0
please try below code.
@end
@implementation UILabel (CustomFont)
-(void)setFontName:(NSString *)value{
CGFloat newsize = (self.font.pointSize * [UIScreen mainScreen].bounds.size.width)/320;
[self setFont:[UIFont fontWithName:self.font.fontName size:newsize]];
}
@end
@implementation UITextField (CustomFont)
-(void)setFontName:(NSString *)value{
CGFloat newsize = (self.font.pointSize * [UIScreen mainScreen].bounds.size.width)/320;
[self setFont:[UIFont fontWithName:self.font.fontName size:newsize]];
}
@end
@implementation UIButton (CustomFont)
-(void)setFontName:(NSString *)value{
CGFloat newsize = (self.titleLabel.font.pointSize * [UIScreen mainScreen].bounds.size.width)/320;
[self.titleLabel setFont:[UIFont fontWithName:self.titleLabel.font.fontName size:newsize]];
}
@end
@end

@interface UILabel (CustomFont)
-(void)setFontName:(NSString *)value;
@end
@interface UITextField (CustomFont)
-(void)setFontName:(NSString *)value;
@end
@interface UIButton (CustomFont)
-(void)setFontName:(NSString *)value;
@end
herry.master
quelle