web-dev-qa-db-de.com

Kann ich eine benutzerdefinierte Schriftart in eine iPhone-Anwendung einbetten?

Diese Frage bezieht sich auf iOS vor 3.2. Seit 3.2 ist diese Funktionalität mit der untenstehenden Antwort von samvermette leicht zu erreichen, und ich habe die akzeptierte Antwort (vom Befehl in samvermette) geändert, um dies wiederzugeben. Ich kann nicht beide Antworten würdigen (abgesehen von Upvotes), aber beide sind gut.

Ich möchte, dass eine App einen benutzerdefinierten Zeichensatz zum Rendern von Text enthält, ihn lädt und dann mit Standardelementen von UIKit wie UILabel verwendet. Ist das möglich?

Ich habe folgende Links gefunden:

dafür müsste ich jedoch jede Glyphe selbst rendern, was für harte Arbeit etwas zu viel ist, insbesondere für mehrzeiligen Text.

Ich habe auch Beiträge gefunden, die sagen, dass dies nicht möglich ist, aber ohne Begründung, also suche ich nach einer definitiven Antwort.


EDIT - Experiment -[UIFont fontWithName:size:] fehlgeschlagen

Ich habe Harrowprint.tff heruntergeladen (von hier heruntergeladen) und es meinem Ressourcenverzeichnis und dem Projekt hinzugefügt. Ich habe dann diesen Code ausprobiert:

UIFont* font = [UIFont fontWithName:@"Harrowprint" size:20];

was dazu führte, dass eine Ausnahme ausgelöst wurde. Ein Blick auf die TTF-Datei in Finder bestätigte, dass der Schriftname Harrowprint war. 


EDIT - Bisher gab es eine Reihe von Antworten, in denen ich aufgefordert wurde, die Dokumentation zu X oder Y zu lesen. Ich habe ausführlich mit allen experimentiert und bin nirgendwohin gekommen. In einem Fall erwies sich X als relevant nur für OS X, nicht für iPhone. Daher setze ich für diese Frage eine Belohnung, und ich werde die Belohnung an die erste Person vergeben, die eine Antwort gibt (unter Verwendung nur dokumentierter APIs), die mit ausreichenden Informationen antwortet, damit diese auf dem Gerät funktioniert. Auch das Arbeiten am Simulator wäre ein Bonus. 


EDIT - Es scheint, dass das Kopfgeld automatisch der Antwort mit der höchsten Anzahl von Stimmen zuweist. Interessant. Niemand hat tatsächlich eine Antwort auf diese Frage gegeben - die Lösung, die die Kodierung Ihrer eigenen UILabel-Unterklasse beinhaltet, unterstützt kein Word-Wrap, was für mich ein wesentliches Merkmal ist. 

755
Airsource Ltd

iOS 3.2 und höher unterstützt dies. Direkt aus dem Was ist neu in iPhone OS 3.2 doc:

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 UIAppFonts-Schlüssel in ihre Info.plist-Datei aufnehmen. Der Wert dieses Schlüssels ist ein Array von Strings, das die Zeichensatzdateien im Bundle der Anwendung identifiziert. Wenn das System den Schlüssel sieht, lädt es die angegebenen Schriftarten und stellt sie der Anwendung zur Verfügung.

Nachdem die Schriftarten in Info.plist festgelegt wurden, 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 (Login erforderlich)

Und hier ist ein ausgezeichnetes und einfaches 3-Schritte-Tutorial, wie Sie dies erreichen können (defekter Link entfernt)

  1. Fügen Sie Ihre benutzerdefinierten Schriftdateien mit Xcode als Ressource in Ihr Projekt ein
  2. Fügen Sie Ihrer Info.plist-Datei einen Schlüssel mit dem Namen UIAppFonts hinzu.
  3. Machen Sie diesen Schlüssel zu einem Array
  4. Geben Sie für jede Schriftart, die Sie verwenden, den vollständigen Namen der Schriftartdatei (einschließlich der Erweiterung) als Elemente des UIAppFonts-Arrays ein
  5. Info.plist speichern
  6. Jetzt können Sie in Ihrer Anwendung einfach [UIFont fontWithName:@"CustomFontName" size:12] aufrufen, um die benutzerdefinierte Schriftart für Ihre UILabels und UITextViews usw. zu erhalten.

Außerdem: Stellen Sie sicher, dass sich die Schriftarten in den Ressourcen des Kopierpakets befinden.

633
samvermette

Edit: Ab iOS 3.2 ist diese Funktionalität bereits integriert. Wenn Sie vor Version 3.2 Unterstützung benötigen, können Sie diese Lösung weiterhin verwenden.

Ich habe ein einfaches Modul erstellt, das UILabel erweitert und das Laden von .ttf-Dateien übernimmt. Ich habe es Open Source unter der Apache-Lizenz veröffentlicht und auf github Here gestellt.

Die wichtigen Dateien sind FontLabel.h und FontLabel.m.

Es verwendet einen Teil des Codes aus Genericrichs Antwort .

Durchsuchen Sie die Quelle Hier.

OR

  • Kopieren Sie Ihre Schriftartdatei in Ressourcen

  • Fügen Sie Ihrer Info.plist-Datei einen Schlüssel mit dem Namen UIAppFonts hinzu. ("Schriftarten, die von der Anwendung bereitgestellt werden)

  • Machen Sie diesen Schlüssel zu einem Array 

  • Geben Sie für jede vorhandene Schriftart den vollständigen Namen Ihrer Schriftartendatei (einschließlich der Erweiterung) als Elemente des UIAppFonts-Arrays ein 

  • Info.plist speichern

  • Jetzt können Sie in Ihrer Anwendung einfach [UIFont fontWithName:@"CustomFontName" size:15] aufrufen, um die benutzerdefinierte Schriftart für Ihre UILabels und UITextViews usw. zu erhalten.

Für mehr Informationen

296
commanda

Benutzerdefinierte Schriftarten können auf einfache Weise in iOS 4 verwendet werden.

  1. Fügen Sie Ihre Schriftdatei (zum Beispiel Chalkduster.ttf) im Ordner Resources des Projekts in XCode hinzu.
  2. Öffnen Sie info.plist und fügen Sie einen neuen Schlüssel mit dem Namen UIAppFonts hinzu. Der Typ dieses Schlüssels sollte Array sein.
  3. Fügen Sie Ihrem Array Ihren benutzerdefinierten Namen einschließlich der Erweiterung (Chalkduster.ttf) hinzu.
  4. Jetzt können Sie [UIFont fontWithName:@"Chalkduster" size:16] in Ihrer Anwendung verwenden.

Leider erlaubt IB nicht, Etiketten mit benutzerdefinierten Schriftarten zu initialisieren. diese Frage um dieses Problem zu lösen. Meine Lieblingslösung ist die benutzerdefinierte 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
114
alexey

Fügen Sie in Info.plist den Eintrag "Von der Anwendung bereitgestellte Schriftarten" hinzu und fügen Sie die Schriftnamen als Strings ein:

Fonts provided by application
           Item 0        myfontname.ttf
           Item 1        myfontname-bold.ttf
           ...

Vergewissern Sie sich dann, dass 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 Ihr Etikett verwenden (Sie können den obigen Code verwenden, um den Parameter "fontWithName" zu erhalten):

[label setFont:[UIFont fontWithName:@"MyFontName-Regular" size:18]];
51
bdev

edit: Diese Antwort gilt ab iOS3.2. benutze UIAppFonts

Die einzige Möglichkeit, benutzerdefinierte UIFonts erfolgreich zu laden, ist über das private GraphicsServices-Framework.

Folgendes lädt alle .ttf-Schriftarten im Hauptpaket der Anwendung:

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 die Schriftarten geladen sind, können sie 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 der 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;
}
36
rpetrich

Mit iOS 8 + und Xcode 6 + können Sie dies leicht machen. Hier sind die Schritte:

1) Ziehen Sie Ihre Schriftart per Drag & Drop in den Ordner Xcode Supporting Files. Vergessen Sie nicht, Ihre App im Bereich Zu Zielen hinzufügen zu markieren. Ab diesem Zeitpunkt können Sie diese Schriftart in IB verwenden und aus der Schriftpalette auswählen.

enter image description here

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. Sie enthält den Element 0-Schlüssel. Sie müssen Ihren Schriftnamen als Wert angeben. Der Name der Schriftart kann von der Schriftartdatei abweichen. Versuchen Sie jedoch zunächst, Ihren Dateinamen in den meisten Fällen dieser Arbeit hinzuzufügen. 

enter image description here

Wenn nicht, dieser Artikel hat mir immer geholfen.

Hier finden Sie den Code aus diesem Artikel, der Ihnen hilft, Ihren Namen zu finden.

func allFonts(){

   for family in UIFont.familyNames(){

       println(family)


       for name in UIFont.fontNamesForFamilyName(family.description)
       {
           println("  \(name)")
       }

   }

}

BEARBEITEN

Ich möchte erwähnen, dass Sie zu den Build-Phasen von Target, Copy Bundle Font-Dateien hinzufügen müssen. Ohne sie wird Ihre Schriftart nicht auf dem Gerät angezeigt. Und es könnte zu unerwartetem Verhalten führen. 

Zum Beispiel stelle ich eine bug fest, wenn UITextField eine benutzerdefinierte Schriftart hat, diese Schriftart jedoch nicht in den Copy Bundle-Ressourcen enthalten war. Und wenn ich mit dieser viewcontroller zur textfield wechsle, dauert es etwa 4 Sekunden, bis die viewDidLoad-Funktion aufgerufen wird. Durch die Behebung von Schriftproblemen wurde diese Verzögerung entfernt. Empfehle es also zweimal. (rdar: // 20028250) Übrigens, ich konnte den Fehler nicht reproduzieren, aber ich bin mir sicher, dass das Problem bei der Schriftart lag.

33
Dima Deplov

Ich habe das so gemacht:

Laden Sie die Schrift:

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

Führen Sie nun in Ihrem drawRect: Folgendes aus:

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

Im Grunde müssen Sie etwas brutale Kraft durch den Text ziehen und mit der magischen Zahl herumfummeln, um Ihren Offset (hier siehe 29) in der Schriftart zu finden, aber es funktioniert.

Sie müssen auch sicherstellen, dass die Schrift legal eingebettet werden kann. Die meisten sind nicht und es gibt Anwälte, die sich auf diese Art von Dingen spezialisieren, seien Sie also gewarnt.

27
Genericrich

Wenn Sie xcode 4.3 verwenden, müssen Sie font dem Build Phase unter Copy Bundle Resources entsprechend https://stackoverflow.com/users/1292829/arne im Thread Custom Fonts Xcode 4.3 hinzufügen. Dies hat für mich funktioniert, hier sind die Schritte, die ich für benutzerdefinierte Schriften in meiner App unternommen habe:

  1. Fügen Sie die Schriftart Ihrem Projekt hinzu. Ich zog die OTF- (oder TTF-) Dateien in eine neue Gruppe, die ich erstellt hatte, und akzeptierte die Wahl von xcode von copying the files over to the project folder.
  2. Erstellen Sie das UIAppFonts-Array, wobei Ihre Schriftarten als Elemente im Array aufgeführt sind. Nur die names, nicht die Erweiterung (z. B. "GothamBold", "GothamBold-Italic").
  3. Klicken Sie auf den Weg project name oben in Project Navigator auf der linken Seite des Bildschirms.
  4. Klicken Sie auf die Registerkarte Build Phases, die im Hauptbereich von xcode angezeigt wird.
  5. Erweitern Sie den Abschnitt "Copy Bundle Resources" und klicken Sie auf "+", um die Schriftart hinzuzufügen.
  6. Wählen Sie im Datei-Navigator die Schriftdatei aus, die beim Klicken auf "+" geöffnet wird.
  7. Tun Sie dies für jede Schriftart, die Sie add to the project benötigen.
20
SKris

Ja, Sie können benutzerdefinierte Schriftarten hinzufügen. Weitere Informationen finden Sie in der Dokumentation zu UIFont, insbesondere zur Methode fontWithName:size:.

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 Recht haben, diese Schriftart zu verwenden. Indem Sie es in Ihre App aufnehmen, verteilen Sie es auch, und Sie müssen dazu das Recht haben.

20
August

Es ist sehr einfach, Ihrer vorhandenen iOS-App eine neue Schriftart hinzuzufügen.

Sie müssen nur die Schriftart hinzufügen, z. font.ttf in Ihren Ressourcenordner.

Öffnen Sie Ihre Anwendung info.plist. Fügen Sie eine neue Zeile als "Von der Anwendung bereitgestellte Schriftarten" hinzu, und geben Sie den Namen der Schriftart als font.ttf ein.

Und wenn Sie die Schriftart einstellen, machen Sie als setFont:"corresponding Font Name"

Sie können mit NSArray *check = [UIFont familyNames]; prüfen, ob Ihre Schrift hinzugefügt wird oder nicht.

Es gibt alle Schriftarten zurück, die Ihre Anwendung unterstützt.

12
Subrat

Hier ist die Schritt für Schritt Anleitung. Keine zusätzliche Bibliothek oder spezielle Codierung erforderlich. 

http://shang-liang.com/blog/custom-fonts-in-ios4/

Meistens liegt das Problem bei der Schriftart und nicht bei der Methode. Am besten verwenden Sie dazu eine Schriftart, die auf jeden Fall funktionieren wird, wie Verdana oder Geogia. Wechseln Sie dann zur gewünschten Schriftart. Wenn dies nicht funktioniert, ist möglicherweise der Name der Schriftart nicht richtig oder die Schriftart ist keine gut formatierte Schriftart.

12
5566

Ich würde empfehlen, hier eines meiner bevorzugten kurzen Tutorials zu verwenden: http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/ , von der diese Informationen stammen.

Schritt 1 - Ziehen Sie Ihre .ttf oder .otf aus dem Finder in Ihr Projekt.

HINWEIS - Stellen Sie sicher, dass Sie in Ihrem Hauptanwendungsziel auf das Kontrollkästchen "Zu Zielen hinzufügen" klicken.

 Drag font files into your project and click to add them to your target

Wenn Sie vergessen haben, das Ziel zu Ihrem Ziel hinzuzufügen, klicken Sie auf die Schriftartdatei in Ihrer Projekthierarchie, und klicken Sie im rechten Bereich auf das Hauptanwendungsziel im Abschnitt Zielmitgliedschaft

 how to add fonts to app target if you forgot

Um sicherzustellen, dass Ihre Schriften Teil Ihres App-Ziels sind, vergewissern Sie sich, dass sie in Ihren Bundle-Ressourcen kopieren in Buildphasen angezeigt werden.

 how to check resources to see if fonts are part of app target

Schritt 2 - Füge die Namen der Schriftarten zu Plist hinzu

Gehen Sie zu Benutzerdefinierte iOS-Zieleigenschaften in Ihrem Info-Abschnitt und fügen Sie den Elementen in diesem Abschnitt mit dem Namen Fonts provided by application einen Schlüssel hinzu (Sie sollten sehen, dass er bei der Eingabe als Option erscheint und Das Array stellt sich selbst als Array dar. Klicken Sie auf den kleinen Pfeil, um die Array-Elemente zu öffnen, und geben Sie die Namen der hinzugefügten .ttf- oder .otf-Dateien ein, damit Ihre App wissen kann, dass dies die Schriftartdateien sind, die verfügbar sein sollen

HINWEIS - Wenn Ihre App direkt nach diesem Schritt abstürzt, überprüfen Sie die Rechtschreibung der Elemente, die Sie hier hinzufügen.

 example plist with custom fonts added

Schritt 3 - Finden Sie die Namen Ihrer Schriftarten heraus, damit Sie sie aufrufen können

Häufig unterscheidet sich der von Ihrer Anwendung angezeigte Zeichensatzname von dem, der Ihrer Meinung nach auf dem Dateinamen dieser Schriftart basiert. Fügen Sie diesen Code in Ihren Code ein und überprüfen Sie das Protokoll, das Ihre Anwendung erstellt

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 Log sollte ungefähr so ​​aussehen:

 Example of searching log to find font names

Schritt 4 - Verwenden Sie Ihre neue benutzerdefinierte Schriftart unter dem Namen aus Schritt 3.

Schnell

 label.font = UIFont(name: "SourceSansPro-Regular", size: 18)

Ziel c

 label.font = [UIFont fontWithName:@"SourceSansPro-Regular" size:18];
11
ColossalChris

Finden Sie die TTF im Finder und "Get Info". Unter der Überschrift "Vollständiger Name:" gab es einen Namen, den ich dann mit fontWithName verwendete (ich habe nur den genauen Namen kopiert und eingefügt. In diesem Fall war keine Erweiterung ".ttf" erforderlich).

10
Nano

Ein wichtiger Hinweis: Sie sollten den mit der Schriftart verknüpften "PostScript-Namen" verwenden, nicht den vollständigen Namen oder den Familiennamen. Dieser Name kann sich oft vom normalen Namen der Schrift unterscheiden.

8
user576862

Es ist noch nicht verfügbar, aber die nächste Version von cocos2d (2d game framework) unterstützt Bitmap-Schriftarten mit variabler Länge als Zeichentabelle. 

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 ein Posting gesehen, das darauf hinweist, dass es in den nächsten ein oder zwei Monaten sein wird.

8
John

Vielleicht hat der Autor vergessen, der Schriftart einen Mac FOND-Namen zu geben?

  1. Öffnen Sie die Schriftart in FontForge und gehen Sie zu Element> Font-Informationen
  2. Es gibt eine "Mac" -Option, mit der Sie den FOND-Namen einstellen können.
  3. Unter Datei> Schrift exportieren können Sie ein neues TTF erstellen

Sie können auch die Option "Apple" im Exportdialogfeld ausprobieren.

DISCLAIMER: Ich bin kein IPhone-Entwickler!

6
ByteNirvana

folge diesem Schritt

1) Kopieren Sie Ihre Schrift in Ihr Projekt

2) öffne deine .plist Datei im Quellcode-Modus ... (Hinweis - öffne info.plist nicht)

3) Vorher - Klicken Sie mit der rechten Maustaste auf Ihre Schriftart und öffnen Sie sie in fontforge oder einem ähnlichen Editor und install in Ihrem System. Es sollte install sein.

4) Geben Sie dies ein

 <key>UIAppFonts</key>
<array>
    <string>MyriadPro.otf</string>
</array>

5) Gib diesen Code in deinen class .m ein

 [lblPoints setFont:[UIFont fontWithName:@"Myriad Pro" size:15.0]];

Hier werden die lblPoints ab Ihrem UILabel geändert.

Erledigt!! Wenn Ihre Schrift immer noch nicht funktioniert, überprüfen Sie zuerst die Kompatibilität Ihrer Schriftarten

6
Kirtikumar A.

Ich habe die verschiedenen Vorschläge auf dieser Seite in iOS 3.1.2 ausprobiert und hier meine Schlussfolgerungen:

Die einfache Verwendung von [UIFont fontWithName:size:] mit den Zeichensätzen im Ressourcenverzeichnis funktioniert nicht, selbst wenn der FOND-Name mit FontForge festgelegt ist.

[UIFont fontWithName:size:] funktioniert, wenn die Schriftarten zuerst mit GSFontAddFromFile geladen werden. Da GSFontAddFromFile nicht Teil von iOS 3.1.2 ist, muss es dynamisch geladen werden, wie von @rpetrich beschrieben.

6

Ich habe einige der Ratschläge auf dieser Seite in etwas zusammengefasst, das auf iOS 5 für mich funktioniert.

Zuerst müssen Sie die benutzerdefinierte Schriftart zu Ihrem Projekt hinzufügen. Dann müssen Sie den Anweisungen von @iPhoneDev folgen und die Schriftart Ihrer info.plist-Datei hinzufügen.

Nachdem Sie das getan haben, funktioniert das:

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 Anweisungen von @Daniel Wood und drücken Sie die Befehlstaste-i, während Sie sich in FontBook befinden.

Dann genießen Sie Ihre benutzerdefinierte Schriftart.

5
AaronBaker

Fügen Sie zunächst die Schriftart im .odt-Format zu Ihren Ressourcen hinzu. In diesem Fall verwenden wir DINEngschriftStd.otf. Anschließend können Sie die Schriftart mit diesem Code der Beschriftung zuweisen

[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 angeben. Fügen Sie einfach einen Datensatz "Zeichensätze, die von der Anwendung bereitgestellt werden" hinzu, und fügen Sie eine Zeichenfolge mit dem Namen des Zeichensatzes (DINEngschriftStd.otf) ein.

5

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

  1. Fügen Sie Ihre Schriftdatei (z. B. Chalkduster.ttf) dem Ordner Resources des Projekts in XCode hinzu.
  2. Öffnen Sie info.plist und fügen Sie einen neuen Schlüssel mit dem Namen UIAppFonts hinzu. Der Typ dieses Schlüssels sollte Array sein.
  3. Fügen Sie Ihrem Array Ihren benutzerdefinierten Schriftnamen einschließlich der Erweiterung hinzu ("Chalkduster.ttf").
  4. Verwenden Sie [UIFont fontWithName:@"Real Font Name" size:16] in Ihrer Anwendung.

, ABER Der "Real Font Name" ist nicht immer der, den Sie in Fontbook sehen. Am besten fragen Sie Ihr Gerät, welche Schriften es sieht und wie die Namen genau lauten.

Ich verwende den uifont-name-grabber unter: uifont-name-grabber

Legen Sie einfach die gewünschten Zeichensätze in das xcode-Projekt, fügen Sie den Dateinamen der Plist hinzu und führen Sie ihn auf dem Gerät aus, für das Sie ein Gerät erstellen. Es wird Ihnen eine E-Mail mit einer vollständigen Zeichensatzliste unter Verwendung der von UIFont fontWithName: erwarteten Namen gesendet.

5
Jarson

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

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

5
RichX

ATSApplicationFontsPath nachschlagen

Ein einfacher Plist-Eintrag, mit dem Sie die Zeichensatzdatei (en) in den App-Ressourcenordner aufnehmen können und in Ihrer App "funktionieren".

5
Matt Sephton

Es gibt eine neue Möglichkeit, benutzerdefinierte Schriftarten zu verwenden, beginnend mit iOS 4.1. Sie können Schriftarten dynamisch laden, sei es aus in der App enthaltenen Dateien, heruntergeladenen Daten oder was auch immer 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 jedoch zu lange dauern, wenn Sie über viele Schriftarten verfügen.

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

Sie verwenden die Funktion CTFontManagerRegisterGraphicsFont, die der Schriftartdaten einen Puffer gibt. Es ist dann für UIFont und Web-Views 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);
3
David M.

Swift, Code Way: (funktioniert auch mit Swift 2.0)

Fügen Sie Ihrem Projekt die erforderlichen Schriftarten hinzu (wie Bilder hinzufügen, ziehen Sie sie einfach in Xcode) und 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: "")
    }

}

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)
3
Daniel Krom

Sie können die erforderlichen "FONT" -Dateien im Ressourcenordner hinzufügen. Gehen Sie dann in die Project Info.plist-Datei und verwenden Sie den SCHLÜSSEL "Von der Anwendung bereitgestellte Schriftarten" und den Wert "FONT NAME".

Dann können Sie die Methode [UIFont fontwithName:@"FONT NAME" size:12]; aufrufen.

2
Nishan29

ja, Sie können in Ihrer Anwendung eine benutzerdefinierte Schriftart verwenden

schritt für Schritt folgend dort:

Fügen Sie Ihre benutzerdefinierten Schriftartdateien in unterstützende 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 vorhandene Schriftart den vollständigen Namen Ihrer Schriftartendatei (einschließlich der Erweiterung) als Elemente des UIAppFonts-Arrays ein

Info.plist speichern Jetzt können Sie in Ihrer Anwendung einfach [UIFont fontWithName: @ "your Custom font Name" (Größe: 20): 20] aufrufen, um die benutzerdefinierte Schriftart für Ihre UILabels Zu erhalten, nachdem Sie diese angewendet haben, wenn Sie die korrekte Schriftart nicht erhalten Sie doppelklicken auf die benutzerdefinierte Schriftart und sehen sorgfältig, dass der Name der Schriftart der oberen Seite kommt. Kopieren Sie diese Schriftart, und fügen Sie sie hier ein [UIFont fontWithName: @ "hier an Ihrem benutzerdefinierten Schriftartnamen vorbei. Größe: 20] 

ich hoffe, dass Sie die richtige Antwort erhalten

1
Akhil Bhadauria

Obwohl einige der obigen Antworten richtig sind, habe ich ein detailliertes visuelles Lernprogramm für Personen geschrieben, die immer noch Probleme mit Schriftarten haben.

Die Lösungen, über denen sich die Schrift befindet, weisen Sie an, die Schriftart zur Plist hinzuzufügen und zu verwenden

[self.labelOutlet setFont:[UIFont fontWithName:@"Sathu" size:10]];

sind die richtigen. Bitte verwenden Sie jetzt eine andere Art von Hacking. Wenn Sie immer noch Probleme haben, Schriftnamen zu finden und sie hinzuzufügen, finden Sie hier das Tutorial - 

Benutzerdefinierte Schriftarten in der ios-Anwendung verwenden

1
Bharat Gulati

Ich habe alles möglich gemacht, aber die neuen Schriftarten erscheinen nicht, also habe ich die Lösung gefunden:

Wenn Sie die fot-Dateien ziehen (otf oder ttf), vergessen Sie nicht, das Kontrollkästchen unter "Zu Zielen hinzufügen" zu aktivieren.

Danach erscheint Ihre Schriftart und alles funktioniert gut.

1
ElizaS

ja, Sie können in Ihrer Anwendung eine benutzerdefinierte Schriftart verwenden

schritt für Schritt folgend dort:

  • Fügen Sie Ihre benutzerdefinierten Schriftartdateien in unterstützende Dateien zu Ihrem Projekt hinzu
  • Fügen Sie der Info.plist-Datei einen Schlüssel mit dem Namen UIAppFonts hinzu.
  • Machen Sie diesen Schlüssel zu einem Array
  • Geben Sie für jede vorhandene Schriftart den vollständigen Namen Ihrer Schriftartendatei (einschließlich der Erweiterung) als Elemente des UIAppFonts-Arrays ein
  • Speichern Sie Info.plistJetzt können Sie in Ihrer Anwendung einfach [UIFont fontWithName:@"your Custom font Name" size:20] aufrufen, um die benutzerdefinierte Schriftart für Ihre UILabels zu erhalten. 

nach dem Anwenden dieses Befehls, wenn Sie nicht die richtige Schriftart erhalten Dann doppelklicken Sie auf die benutzerdefinierte Schriftart und sehen, dass der Name der Schriftart der oberen Seite sorgfältig angezeigt wird Kopieren Sie diese Schriftart und fügen Sie sie hier ein: [UIFont fontWithName:@" here past your Custom font Name" size:20] Ich hoffe, dass Sie die richtige Antwort erhalten

1
user2691469

Als Erweiterung von @ bdev answer handelt es sich hier um eine aktualisierte Version, in der nur benutzerdefinierte Schriften aufgeführt werden.

Schritt 1: Ermitteln Sie alle Systemzeichensätze mithilfe der Antwort von @ bdev und speichern Sie sie in einer Datei.

Fügen Sie in -(void)viewDidLoad des ersten View Controllers nach [super viewDidLoad] (oder in App Delegate) den folgenden Code ein:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                     NSUserDomainMask, YES);
NSMutableArray *system_fonts = [NSMutableArray array];
for (NSString *familyName in [UIFont familyNames]) {
    for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
        [system_fonts addObject:fontName];
    }
}
if([paths count] > 0) {
    [system_fonts writeToFile:[[paths objectAtIndex:0]
                               stringByAppendingPathComponent:@"array.out"] atomically:YES];
}

Führen Sie die App einmal aus. Stoppen Sie es danach.

Schritt 2: Benutzerdefinierte Schriftart zum Projekt hinzufügen

Fügen Sie mithilfe der in der akzeptierten Antwort angezeigten Methode Ihre benutzerdefinierten Schriftarten hinzu. Aktualisieren Sie .plist und fügen Sie die zu erstellenden Schriftdateien hinzu, indem Sie Add To Target überprüfen.

Schritt 3: Vergleichen Sie die Systemzeichensätze mit der aktuellen Zeichensatzliste

Ersetzen Sie die Codes in Schritt 1 in:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                     NSUserDomainMask, YES);
NSMutableArray *system_fonts = [NSMutableArray arrayWithContentsOfFile:[[paths objectAtIndex:0]
                                                                        stringByAppendingPathComponent:@"array.out"]];

for (NSString *familyName in [UIFont familyNames]) {
    for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
        if (![system_fonts containsObject:fontName]) {
            NSLog(@"%@", fontName);
        }
    }
}

Führen Sie die App aus und die Liste der hinzugefügten benutzerdefinierten Schriftarten wird angezeigt.

Dies gilt für iOS 3.2 bis iOS 6 (zukünftige Versionen funktionieren wahrscheinlich gut). Funktioniert auch mit .ttc und .ttf.

0
Raptor

Wie alle vorherigen Antworten gezeigt haben, ist dies sehr gut möglich und in neueren iOS-Versionen ziemlich einfach.

Ich weiß, dass dies keine technische Antwort ist, aber da viele Leute es falsch machen (wodurch Lizenzen verletzt werden, die Sie möglicherweise viel Geld kosten, wenn Sie verklagt werden), möchte ich eine Einschränkung hier verstärken: Einbetten eines Zolls Schriftart in einer iOS (oder einer anderen Art) App ist im Grunde Neuverteilung die Schriftart. Bei den meisten Lizenzen für kommerzielle Schriftarten gilt verbieten Weiterverteilung. Stellen Sie daher sicher, dass Sie gemäß der Lizenz handeln.

0
DrMickeyLauer