Ich möchte, dass eine App eine benutzerdefinierte Schriftart zum Rendern von Text enthält, diese lädt und dann mit Standardelementen UIKit
wie verwendet UILabel
. Ist das möglich?
Ich möchte, dass eine App eine benutzerdefinierte Schriftart zum Rendern von Text enthält, diese lädt und dann mit Standardelementen UIKit
wie verwendet UILabel
. Ist das möglich?
Antworten:
iOS 3.2 und höher unterstützen dies. Direkt aus dem neuen Dokument in iPhone OS 3.2 :
Unterstützung
für benutzerdefinierte Schriftarten Anwendungen, die benutzerdefinierte Schriftarten verwenden möchten, können diese Schriftarten jetzt in ihr Anwendungspaket aufnehmen und diese Schriftarten beim System registrieren, indem sie den Schlüssel UIAppFonts in ihre Datei Info.plist aufnehmen. Der Wert dieses Schlüssels ist ein Array von Zeichenfolgen, die die Schriftdateien im Bundle der Anwendung identifizieren. Wenn das System den Schlüssel sieht, lädt es die angegebenen Schriftarten und stellt sie der Anwendung zur Verfügung.
Sobald die Schriftarten in festgelegt wurden Info.plist
, können Sie Ihre benutzerdefinierten Schriftarten wie jede andere Schriftart in IB oder programmgesteuert verwenden.
In den Apple Developer Forums gibt es einen laufenden Thread:
https://devforums.apple.com/thread/37824 (Anmeldung erforderlich)
Und hier ist ein exzellentes und einfaches 3-Schritte-Tutorial, wie dies erreicht werden kann (defekter Link entfernt)
Info.plist
Datei einen Schlüssel mit dem Namen hinzu UIAppFonts
.UIAppFonts
Array einInfo.plist
[UIFont fontWithName:@"CustomFontName" size:12]
, um die benutzerdefinierte Schriftart für Ihre UILabels und zu erhalten UITextViews usw. zu erhalten.Außerdem: Stellen Sie sicher, dass sich die Schriftarten in Ihren Copy Bundle-Ressourcen befinden.
Bearbeiten: Ab iOS 3.2 ist diese Funktionalität integriert. Wenn Sie Pre-3.2 unterstützen müssen, können Sie diese Lösung weiterhin verwenden.
Ich habe ein einfaches Modul erstellt, UILabel
das das Laden von .ttf-Dateien erweitert und handhabt. Ich habe es Open Source unter der Apache-Lizenz veröffentlicht und es hier auf Github gestellt .
Die wichtigen Dateien sind FontLabel.h
und FontLabel.m
.
Es verwendet einen Teil des Codes aus Genericrichs Antwort .
Durchsuchen Sie die Quelle hier.
ODER
Kopieren Sie Ihre Schriftartdatei in Ressourcen
Fügen Sie Ihrer Info.plist
Datei einen Schlüssel mit dem Namen UIAppFonts hinzu. ("Von der Anwendung bereitgestellte Schriftarten)
Machen Sie diesen Schlüssel zu einem Array
Geben Sie für jede Schriftart den vollständigen Namen Ihrer Schriftartdatei (einschließlich der Erweiterung) als Elemente in das UIAppFonts-Array ein
speichern Info.plist
Jetzt können Sie in Ihrer Anwendung einfach aufrufen [UIFont fontWithName:@"CustomFontName" size:15]
, um die benutzerdefinierte Schriftart für Ihr UILabels
und UITextViews
usw. zu erhalten.
Es gibt eine einfache Möglichkeit, benutzerdefinierte Schriftarten in iOS 4 zu verwenden .
Chalkduster.ttf
) zum Ordner Ressourcen des Projekts in XCode hinzu.info.plist
und fügen Sie einen neuen Schlüssel mit dem Namen hinzu UIAppFonts
. Der Typ dieses Schlüssels sollte Array sein.Chalkduster.ttf
).[UIFont fontWithName:@"Chalkduster" size:16]
in Ihrer Anwendung verwenden.Leider erlaubt IB nicht, Beschriftungen mit benutzerdefinierten Schriftarten zu initialisieren. Siehe diese Frage , um dieses Problem zu lösen. Meine Lieblingslösung ist die Verwendung einer benutzerdefinierten UILabel
Unterklasse:
@implementation CustomFontLabel
- (id)initWithCoder:(NSCoder *)decoder
{
if (self = [super initWithCoder: decoder])
{
[self setFont: [UIFont fontWithName: @"Chalkduster" size: self.font.pointSize]];
}
return self;
}
@end
Fügen Sie in Info.plist den Eintrag "Von der Anwendung bereitgestellte Schriftarten" hinzu und fügen Sie die Schriftnamen als Zeichenfolgen ein:
Fonts provided by application
Item 0 myfontname.ttf
Item 1 myfontname-bold.ttf
...
Überprüfen Sie anschließend, ob Ihre Schriftart enthalten ist, indem Sie Folgendes ausführen:
for (NSString *familyName in [UIFont familyNames]) {
for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
NSLog(@"%@", fontName);
}
}
Beachten Sie, dass Ihr ttf-Dateiname möglicherweise nicht mit dem Namen übereinstimmt, den Sie beim Festlegen der Schriftart für Ihre Beschriftung verwenden (Sie können den obigen Code verwenden, um den Parameter "fontWithName" abzurufen):
[label setFont:[UIFont fontWithName:@"MyFontName-Regular" size:18]];
Bearbeiten: Diese Antwort ist ab iOS3.2 nicht mehr gültig. Verwenden Sie UIAppFonts
Die einzige Möglichkeit, benutzerdefinierte UIFont
s erfolgreich zu laden, ist das private GraphicsServices-Framework.
Im Folgenden werden alle .ttf
Schriftarten im Hauptpaket der Anwendung geladen :
BOOL GSFontAddFromFile(const char * path);
NSUInteger loadFonts()
{
NSUInteger newFontCount = 0;
for (NSString *fontFile in [[NSBundle mainBundle] pathsForResourcesOfType:@"ttf" inDirectory:nil])
newFontCount += GSFontAddFromFile([fontFile UTF8String]);
return newFontCount;
}
Sobald Schriftarten geladen sind, können sie genau wie die von Apple bereitgestellten Schriftarten verwendet werden:
NSLog(@"Available Font Families: %@", [UIFont familyNames]);
[label setFont:[UIFont fontWithName:@"Consolas" size:20.0f]];
GraphicsServices können sogar zur Laufzeit geladen werden, falls die API in Zukunft verschwindet:
#import <dlfcn.h>
NSUInteger loadFonts()
{
NSUInteger newFontCount = 0;
NSBundle *frameworkBundle = [NSBundle bundleWithIdentifier:@"com.apple.GraphicsServices"];
const char *frameworkPath = [[frameworkBundle executablePath] UTF8String];
if (frameworkPath) {
void *graphicsServices = dlopen(frameworkPath, RTLD_NOLOAD | RTLD_LAZY);
if (graphicsServices) {
BOOL (*GSFontAddFromFile)(const char *) = dlsym(graphicsServices, "GSFontAddFromFile");
if (GSFontAddFromFile)
for (NSString *fontFile in [[NSBundle mainBundle] pathsForResourcesOfType:@"ttf" inDirectory:nil])
newFontCount += GSFontAddFromFile([fontFile UTF8String]);
}
}
return newFontCount;
}
[NSString sizeWithFont:[UIFont fontWithName:@"customFont" size:14]];
für alle benutzerdefinierten Schriftarten, die ich ausprobiert habe , 0 Breite und Höhe zurückgegeben werden.
Mit iOS 8
+ und Xcode 6
+ können Sie dies einfach machen. Hier sind die Schritte:
1) Ziehen Sie Ihre Schriftart Xcode
per Drag & Drop in den Ordner "Unterstützende Dateien". Vergessen Sie nicht, Ihre App im Abschnitt Zu Zielen hinzufügen zu markieren . Ab diesem Moment können Sie diese Schriftart in verwenden IB
und sie aus der Schriftartenpalette auswählen.
2) Um diese Schriftart auf Ihrem Gerät verfügbar zu machen, öffnen Sie Ihren info.plist
und fügen Sie den Fonts provided by application
Schlüssel hinzu. Es enthält den Schlüssel Element 0, Sie müssen Ihren Schriftnamen als Wert hinzufügen. Der Name der Schriftart kann von Ihrem Dateinamen abweichen. Versuchen Sie jedoch zunächst, in den meisten Fällen Ihren Dateinamen hinzuzufügen.
Wenn nicht, hat mir dieser Artikel immer geholfen.
Hier ist ein kurzer Ausschnitt des Codes aus diesem Artikel, der Ihnen hilft, Ihren Schriftnamen zu finden.
func allFonts(){
for family in UIFont.familyNames(){
println(family)
for name in UIFont.fontNamesForFamilyName(family.description)
{
println(" \(name)")
}
}
}
Ich möchte erwähnen, dass Sie Schriftarten zu den Build-Phasen Ihres Ziels hinzufügen und Bundle-Ressourcen kopieren müssen . Ohne diese Option wird Ihre Schriftart nicht auf dem Gerät angezeigt. Und es könnte zu unerwartetem Verhalten führen.
Zum Beispiel, in denen ich ein bug
, wenn UITextField
benutzerdefinierten Schriftart, aber diese Schrift war nicht in den Copy Bundle - Ressourcen . Und wenn ich an die segue viewcontroller
mit diesem textfield
, gibt es eine Verzögerung von 4 Sekunden , bevor viewDidLoad
Funktion aufgerufen wurde. Durch das Beheben von Schriftartproblemen wurde diese Verzögerung behoben. Empfehlen Sie es daher zweimal zu überprüfen. (rdar: // 20028250) Übrigens konnte ich den Fehler nicht reproduzieren, aber ich bin mir sicher, dass das Problem bei der Schriftart lag.
Ich habe das so gemacht:
Laden Sie die Schriftart:
- (void)loadFont{
// Get the path to our custom font and create a data provider.
NSString *fontPath = [[NSBundle mainBundle] pathForResource:@"mycustomfont" ofType:@"ttf"];
CGDataProviderRef fontDataProvider = CGDataProviderCreateWithFilename([fontPath UTF8String]);
// Create the font with the data provider, then release the data provider.
customFont = CGFontCreateWithDataProvider(fontDataProvider);
CGDataProviderRelease(fontDataProvider);
}
drawRect:
Tun Sie jetzt in Ihrem Fall Folgendes:
-(void)drawRect:(CGRect)rect{
[super drawRect:rect];
// Get the context.
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClearRect(context, rect);
// Set the customFont to be the font used to draw.
CGContextSetFont(context, customFont);
// Set how the context draws the font, what color, how big.
CGContextSetTextDrawingMode(context, kCGTextFillStroke);
CGContextSetFillColorWithColor(context, self.fontColor.CGColor);
UIColor * strokeColor = [UIColor blackColor];
CGContextSetStrokeColorWithColor(context, strokeColor.CGColor);
CGContextSetFontSize(context, 48.0f);
// Create an array of Glyph's the size of text that will be drawn.
CGGlyph textToPrint[[self.theText length]];
// Loop through the entire length of the text.
for (int i = 0; i < [self.theText length]; ++i) {
// Store each letter in a Glyph and subtract the MagicNumber to get appropriate value.
textToPrint[i] = [[self.theText uppercaseString] characterAtIndex:i] + 3 - 32;
}
CGAffineTransform textTransform = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0);
CGContextSetTextMatrix(context, textTransform);
CGContextShowGlyphsAtPoint(context, 20, 50, textToPrint, [self.theText length]);
}
Grundsätzlich müssen Sie eine Brute-Force-Schleife durch den Text ausführen und mit der magischen Zahl herumfummeln, um Ihren Versatz (hier sehe ich 29) in der Schriftart zu finden, aber es funktioniert.
Außerdem müssen Sie sicherstellen, dass die Schriftart legal eingebettet werden kann. Die meisten sind es nicht und es gibt Anwälte, die sich auf solche Dinge spezialisiert haben. Seien Sie also gewarnt.
CGContextShowTextAtPoint()
- obwohl es mit UTF-8 nicht funktioniert.
Ja, Sie können benutzerdefinierte Schriftarten einfügen. Weitere Informationen zur fontWithName:size:
Methode finden Sie in der Dokumentation zu UIFont .
1) Stellen Sie sicher, dass Sie die Schriftart in Ihren Ressourcenordner aufnehmen.
2) Der "Name" der Schriftart ist nicht unbedingt der Dateiname.
3) Stellen Sie sicher, dass Sie das gesetzliche Recht haben, diese Schriftart zu verwenden. Indem Sie es in Ihre App aufnehmen, verteilen Sie es auch, und Sie müssen das Recht dazu haben.
Wenn Sie verwenden xcode 4.3
, müssen Sie font
das Build Phase
unter Copy Bundle Resources
, gemäß https://stackoverflow.com/users/1292829/arne im Thread, Custom Fonts Xcode 4.3 , hinzufügen . Dies hat bei mir funktioniert. Hier sind die Schritte, die ich unternommen habe, damit benutzerdefinierte Schriftarten in meiner App funktionieren:
OTF
(oder TTF
) Dateien per Drag & Drop in eine neue Gruppe gezogen, die ich erstellt habe, und die Auswahl von xcode akzeptiert copying the files over to the project folder
.UIAppFonts
Array mit Ihren Schriftarten, die als Elemente im Array aufgeführt sind. Nur die names
, nicht die Erweiterung (zB " GothamBold
", " GothamBold-Italic
").project name
oben Project Navigator
links auf dem Bildschirm auf den Weg .Build Phases
Registerkarte, die im Hauptbereich von xcode angezeigt wird.Copy Bundle Resources
Abschnitt " " und klicken Sie auf "+"
, um die Schriftart hinzuzufügen."+"
.add to the project
.Hier finden Sie eine schrittweise Anleitung dazu. Keine zusätzliche Bibliothek oder spezielle Codierung erforderlich.
http://shang-liang.com/blog/custom-fonts-in-ios4/
Meistens liegt das Problem bei der Schriftart, nicht bei der Methode. Der beste Weg, dies zu tun, ist die Verwendung einer Schriftart, die mit Sicherheit funktioniert, wie Verdana oder Geogia. Wechseln Sie dann zur gewünschten Schriftart. Wenn es nicht funktioniert, stimmt der Schriftname möglicherweise nicht oder die Schrift ist nicht gut formatiert.
Es ist sehr einfach, Ihrer vorhandenen iOS-App eine neue Schriftart hinzuzufügen.
Sie müssen nur die Schriftart, z. B. font.ttf, in Ihren Ressourcenordner einfügen.
Öffnen Sie Ihre Anwendung info.plist
. Fügen Sie eine neue Zeile als "Von der Anwendung bereitgestellte Schriftarten" hinzu und geben Sie den Schriftnamen als font.ttf ein.
Und wenn Sie die Schriftart einstellen, gehen Sie wie folgt vor setFont:"corresponding Font Name"
Sie können überprüfen, ob Ihre Schriftart hinzugefügt wurde oder nicht NSArray *check = [UIFont familyNames];
.
Es gibt alle Schriftarten zurück, die Ihre Anwendung unterstützt.
Ich würde empfehlen, eines meiner bevorzugten kurzen Tutorials hier zu befolgen : http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/, aus dem diese Informationen stammen.
Schritt 1 - Ziehen Sie Ihre .ttf oder .otf aus dem Finder in Ihr Projekt
HINWEIS - Stellen Sie sicher, dass Sie auf das Feld "Zu Zielen hinzufügen" in Ihrem Hauptanwendungsziel klicken
Wenn Sie vergessen haben, darauf zu klicken, um es Ihrem Ziel hinzuzufügen, klicken Sie auf die Schriftartdatei in Ihrer Projekthierarchie und im rechten Bereich auf das Hauptziel der App im Abschnitt Zielmitgliedschaft
Um sicherzustellen, dass Ihre Schriftarten Teil Ihres App-Ziels sind, stellen Sie sicher, dass sie in Ihren Copy Bundle-Ressourcen in Build-Phasen angezeigt werden
Schritt 2 - Fügen Sie die Namen der Schriftdateien zu Ihrer Plist hinzu
Gehen Sie zu den benutzerdefinierten iOS-Zieleigenschaften in Ihrem Info- Bereich und fügen Sie den Elementen in diesem Abschnitt einen Schlüssel mit dem Namen hinzu Fonts provided by application
(Sie sollten sehen, dass er bei der Eingabe als Option angezeigt wird und sich selbst als Array einrichtet. Klicken Sie auf den kleinen Pfeil Öffnen Sie die Array-Elemente und geben Sie die Namen der von Ihnen hinzugefügten .ttf- oder .otf-Dateien ein, damit Ihre App weiß, dass dies die gewünschten Schriftartdateien sind
HINWEIS - Wenn Ihre App direkt nach diesem Schritt abstürzt, überprüfen Sie die Rechtschreibung der hier hinzugefügten Elemente
Schritt 3 - Finden Sie die Namen Ihrer Schriftarten heraus, damit Sie sie aufrufen können
Sehr oft unterscheidet sich der von Ihrer Anwendung angezeigte Schriftname von dem, von dem Sie glauben, dass er auf dem Dateinamen für diese Schrift basiert. Fügen Sie diesen in Ihren Code ein und überprüfen Sie das Protokoll, das Ihre Anwendung erstellt, um festzustellen, welcher Schriftname in Ihrem Code aufgerufen werden soll
Schnell
for family: String in UIFont.familyNames(){
print("\(family)")
for names: String in UIFont.fontNamesForFamilyName(family){
print("== \(names)")
}
}
Ziel c
for (NSString* family in [UIFont familyNames]){
NSLog(@"%@", family);
for (NSString* name in [UIFont fontNamesForFamilyName: family]){
NSLog(@" %@", name);
}
}
Ihr Protokoll sollte ungefähr so aussehen:
Schritt 4 - Verwenden Sie Ihre neue benutzerdefinierte Schriftart unter Verwendung des Namens aus Schritt 3
Schnell
label.font = UIFont(name: "SourceSansPro-Regular", size: 18)
Ziel c
label.font = [UIFont fontWithName:@"SourceSansPro-Regular" size:18];
Es ist noch nicht erschienen, aber die nächste Version von cocos2d (2d Game Framework) unterstützt Bitmap-Schriftarten mit variabler Länge als Character Maps.
http://code.google.com/p/cocos2d-iphone/issues/detail?id=317
Der Autor hat kein genaues Veröffentlichungsdatum für diese Version, aber ich habe einen Beitrag gesehen, der darauf hinweist, dass er in den nächsten ein oder zwei Monaten erscheinen wird.
Ein wichtiger Hinweis: Sie sollten den der Schriftart zugeordneten "PostScript-Namen" verwenden, nicht den vollständigen Namen oder den Familiennamen. Dieser Name kann sich häufig vom normalen Namen der Schriftart unterscheiden.
Folgen Sie diesem Schritt
1) Kopieren Sie Ihre Schriftart in Ihr Projekt
2) Öffnen Sie Ihre .plist
Datei im Quellcodemodus ... (Hinweis - Nicht öffnen info.plist
)
3) Vorher - Klicken Sie mit der rechten Maustaste auf Ihre Schriftart und öffnen Sie sie in fontforge oder einem ähnlichen Editor. install
In Ihrem System sollte dies der Fall seininstall
4) Geben Sie dies ein
<key>UIAppFonts</key>
<array>
<string>MyriadPro.otf</string>
</array>
5) Geben Sie diesen Code in Ihr class .m
[lblPoints setFont:[UIFont fontWithName:@"Myriad Pro" size:15.0]];
Hier werden lblPoints ab Ihrem Zeitpunkt geändert UILabel
Erledigt!! Wenn Ihre Schriftart immer noch nicht funktioniert, überprüfen Sie zuerst die Kompatibilität Ihrer Schriftarten
info.plist
?
Vielleicht hat der Autor vergessen, der Schrift einen Mac FOND-Namen zu geben ?
Sie können auch die Option "Apple" im Exportdialog ausprobieren.
HAFTUNGSAUSSCHLUSS : Ich bin kein IPhone-Entwickler!
Ich habe die verschiedenen Vorschläge auf dieser Seite unter iOS 3.1.2 ausprobiert und dies sind meine Schlussfolgerungen:
Die einfache Verwendung [UIFont fontWithName:size:]
mit den Schriftarten im Ressourcenverzeichnis funktioniert nicht, selbst wenn der FOND-Name mit FontForge festgelegt wird.
[UIFont fontWithName:size:]
funktioniert, wenn die Schriftarten zuerst mit GSFontAddFromFile geladen werden. Aber GSFontAddFromFile
ist nicht Teil von iOS 3.1.2 , so dass es dynamisch geladen werden muss , wie durch @rpetrich beschrieben.
Nachsehen ATSApplicationFontsPath
Ein einfacher Plist-Eintrag, mit dem Sie die Schriftartendatei (en) in Ihren App-Ressourcenordner aufnehmen können und die in Ihrer App "nur funktionieren".
Ich habe einige der Ratschläge auf dieser Seite zu etwas zusammengefasst, das für mich unter iOS 5 funktioniert.
Zunächst müssen Sie Ihrem Projekt die benutzerdefinierte Schriftart hinzufügen. Befolgen Sie dann die Anweisungen von @iPhoneDev und fügen Sie die Schriftart zu Ihrer Datei info.plist hinzu.
Nachdem Sie das getan haben, funktioniert dies:
UIFont *yourCustomFont = [UIFont fontWithName:@"YOUR-CUSTOM-FONT-POSTSCRIPT-NAME" size:14.0];
[yourUILabel setFont:yourCustomFont];
Sie müssen jedoch den Postscript-Namen Ihrer Schriftart kennen. Folgen Sie einfach den Ratschlägen von @Daniel Wood und drücken Sie Befehl-i, während Sie in FontBook sind.
Dann genießen Sie Ihre benutzerdefinierte Schriftart.
Fügen Sie zuerst die Schriftart im .odt-Format zu Ihren Ressourcen hinzu. In diesem Fall verwenden wir DINEngschriftStd.otf und weisen den Code dann mit diesem Code der Beschriftung zu
[theUILabel setFont:[UIFont fontWithName:@"DINEngschriftStd" size:21]];
Um sicherzustellen, dass Ihre Schriftart in das Projekt geladen ist, rufen Sie einfach auf
NSLog(@"Available Font Families: %@", [UIFont familyNames]);
In der .plist müssen Sie die Schriftart deklarieren. Fügen Sie einfach einen Datensatz "Von der Anwendung bereitgestellte Schriftarten" hinzu und fügen Sie eine Zeichenfolge für Element 0 mit dem Namen der Schriftart hinzu (DINEngschriftStd.otf).
Für iOS 3.2 und höher: Verwenden Sie die oben genannten Methoden:
[UIFont fontWithName:@"Real Font Name" size:16]
in Ihrer Anwendung.ABER der "echte Schriftname" ist nicht immer der, den Sie im Schriftbuch sehen. Am besten fragen Sie Ihr Gerät, welche Schriftarten es sieht und wie die genauen Namen lauten.
Ich benutze den uifont-name- grabber unter : uifont-name-grabber
Fügen Sie einfach die gewünschten Schriftarten in das xcode-Projekt ein, fügen Sie den Dateinamen zur Liste hinzu und führen Sie ihn auf dem Gerät aus, für das Sie erstellen. Sie erhalten dann eine vollständige Liste der Schriftarten mit den UIFont fontWithName:
erwarteten Namen per E-Mail .
Es gibt eine neue Möglichkeit, benutzerdefinierte Schriftarten zu verwenden, beginnend mit iOS 4.1. Sie können Schriftarten dynamisch laden, sei es aus Dateien, die in der App enthalten sind, heruntergeladene Daten oder was Sie haben. Außerdem können Sie Schriftarten nach Bedarf laden, während die alte Methode sie alle beim Start der App lädt. Dies kann zu lange dauern, wenn Sie über viele Schriftarten verfügen.
Die neue Methode wird beim Laden von ios-dynamic-font beschrieben
Sie verwenden die CTFontManagerRegisterGraphicsFont
Funktion und geben ihr einen Puffer mit Ihren Schriftdaten. Es ist dann für UIFont
und Webansichten verfügbar , genau wie bei der alten Methode. Hier ist der Beispielcode von 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);
kCTFontManagerErrorAlreadyRegistered
: "Die Datei wurde bereits im angegebenen Bereich registriert." developer.apple.com/library/ios/#documentation/Carbon/Reference/…
Fügen Sie Ihrem Projekt die erforderlichen Schriftarten hinzu (genau wie beim Hinzufügen von Bildern, ziehen Sie sie einfach auf Xcode), stellen Sie sicher, dass sie auf Ihr Projekt ausgerichtet sind.
Fügen Sie diese Methode hinzu und laden Sie benutzerdefinierte Schriftarten (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: "")
}
}
Anwendungsbeispiel:
if let fontPath = NSBundle.mainBundle().pathForResource("My-Font", ofType: "ttf"){
loadFont(fontPath)
}
Verwenden Sie die Schriftart:
UIFont(name: "My-Font", size: 16.5)
Sie können die erforderlichen "FONT" -Dateien im Ressourcenordner hinzufügen. Gehen Sie dann zur Projektdatei Info.plist
und verwenden Sie den SCHLÜSSEL "Von der Anwendung bereitgestellte Schriftarten" und den Wert "SCHRIFTNAME".
Dann können Sie die Methode aufrufen [UIFont fontwithName:@"FONT NAME" size:12];
Ich habe alles möglich gemacht, aber die neuen Schriftarten werden nicht angezeigt, also habe ich die Lösung gefunden:
Wenn Sie die Fot-Dateien (otf oder ttf) ziehen, vergessen Sie NICHT, das Kontrollkästchen unter "Zu Zielen hinzufügen" zu aktivieren.
Danach erscheint Ihre Schriftart und alles funktioniert einwandfrei.
Obwohl einige der obigen Antworten richtig sind, habe ich ein detailliertes visuelles Tutorial für Leute geschrieben, die immer noch Probleme mit Schriftarten haben.
Die oben genannten Lösungen weisen Sie an, die Schriftart zur Liste hinzuzufügen und zu verwenden
[self.labelOutlet setFont:[UIFont fontWithName:@"Sathu" size:10]];
sind die richtigen. Bitte verwenden Sie jetzt einen anderen hackischen Weg. Wenn Sie immer noch Probleme haben, Schriftnamen zu finden und hinzuzufügen, finden Sie hier das Tutorial:
Verwenden von benutzerdefinierten Schriftarten in der iOS-Anwendung
Ja, Sie können in Ihrer Anwendung eine benutzerdefinierte Schriftart verwenden
Schritt für Schritt folgen dort:
Fügen Sie Ihre benutzerdefinierten Schriftdateien in unterstützenden Dateien zu Ihrem Projekt hinzu
Fügen Sie Ihrer Info.plist-Datei einen Schlüssel mit dem Namen UIAppFonts hinzu.
Machen Sie diesen Schlüssel zu einem Array
Geben Sie für jede Schriftart den vollständigen Namen Ihrer Schriftartdatei (einschließlich der Erweiterung) als Elemente in das UIAppFonts-Array ein
Info.plist speichern Jetzt können Sie in Ihrer Anwendung einfach [UIFont fontWithName: @ "Ihr benutzerdefinierter Schriftname" Größe: 20] aufrufen, um die benutzerdefinierte Schriftart für Ihre UILabels zu erhalten, nachdem Sie diese angewendet haben. Wenn Sie nicht die richtige Schriftart erhalten, doppelklicken Sie Klicken Sie hier auf die benutzerdefinierte Schriftart und kopieren Sie diese Schriftart. Fügen Sie sie hier ein. [UIFont fontWithName: @ "hier hinter Ihrem benutzerdefinierten Schriftartennamen" Größe: 20]
Ich hoffe, Sie erhalten die richtige Antwort
Ja, Sie können in Ihrer Anwendung eine benutzerdefinierte Schriftart verwenden
Schritt für Schritt folgen dort:
Info.plist
Datei Namen UIAppFonts hinzu.Info.plist
Jetzt speichern in Ihrer Anwendung können Sie einfach anrufen [UIFont fontWithName:@"your Custom font Name" size:20]
, um die benutzerdefinierte Schriftart für Ihre zu erhaltenUILabels
Nachdem Sie dies angewendet haben, wenn Sie nicht die richtige Schriftart erhalten, doppelklicken Sie auf die benutzerdefinierte Schriftart und sehen sorgfältig, dass der Name der oberen Schriftart kommt. Kopieren Sie diese Schriftart und fügen Sie sie ein. Hier [UIFont fontWithName:@" here past your Custom font Name" size:20]
hoffe ich, dass Sie die richtige Antwort erhalten