web-dev-qa-db-fra.com

Puis-je intégrer une police personnalisée dans une application iPhone?

Cette question concerne iOS pré-3.2. Depuis la version 3.2, cette fonctionnalité est facilement réalisable à l'aide de la réponse de samvermette ci-dessous, et j'ai modifié la réponse acceptée (de commande en samvermette) pour refléter cette réponse. Je ne peux pas donner crédit aux deux réponses (à part les votes positifs) mais elles sont bonnes.

J'aimerais qu'une application inclue une police personnalisée pour le rendu du texte, la charge, puis utilise-la avec des éléments UIKit standard tels que UILabel. Est-ce possible?

J'ai trouvé les liens ci-dessous:

mais cela nécessiterait que je rende chaque glyphe moi-même, ce qui est un peu trop comme un travail difficile, en particulier pour un texte multiligne.

J'ai également trouvé des articles qui disent tout de suite que ce n'est pas possible, mais sans justification, alors je cherche une réponse définitive.


EDIT - échec de l'expérience -[UIFont fontWithName:size:]

J'ai téléchargé Harrowprint.tff (téléchargé à partir de ici ) et l'a ajouté à mon répertoire Ressources et au projet. J'ai ensuite essayé ce code:

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

ce qui a entraîné une exception. L'examen du fichier TTF dans le Finder a confirmé que le nom de la police était Harrowprint. 


EDIT - un certain nombre de réponses m'indiquent jusqu'à présent de lire la documentation sur X ou Y. J'ai beaucoup expérimenté avec tout cela et je n'ai abouti à rien. Dans un cas, X s’est avéré pertinent uniquement sous OS X, pas sur iPhone. Par conséquent, je mets une prime pour cette question et je l’attribuerai à la première personne qui fournit une réponse (en utilisant uniquement des API documentées) qui répond avec suffisamment d’informations pour que cela fonctionne avec le périphérique. Travailler sur le simulateur serait également un bonus. 


EDIT - Il semble que la prime soit automatiquement attribuée à la réponse ayant recueilli le plus grand nombre de votes. Intéressant. Personne n’a réellement répondu à la question posée - la solution qui consiste à coder votre propre sous-classe UILabel ne prend pas en charge Word-wrap, qui est une fonctionnalité essentielle pour moi - bien que je puisse l’étendre pour le faire. 

755
Airsource Ltd

iOS 3.2 et versions ultérieures supportent cela. Directement à partir du Nouveautés de l'iPhone OS 3.2 doc:

Prise en charge des polices personnalisées
Les applications souhaitant utiliser des polices personnalisées peuvent désormais les inclure dans leur lot d'applications et les enregistrer auprès du système en incluant la clé UIAppFonts dans leur fichier Info.plist. La valeur de cette clé est un tableau de chaînes identifiant les fichiers de polices de l’ensemble de l’application. Lorsque le système voit la clé, il charge les polices spécifiées et les met à la disposition de l'application.

Une fois que les polices ont été définies dans le Info.plist, vous pouvez utiliser vos polices personnalisées comme n'importe quelle autre police de IB ou par programme.

Un fil de discussion est en cours sur les forums de développement Apple: 
https://devforums.Apple.com/thread/37824 (connexion requise)

Et voici un excellent et simple tutoriel en 3 étapes sur la façon de réaliser ceci (lien brisé enlevé)

  1. Ajoutez vos fichiers de polices personnalisés dans votre projet en utilisant Xcode comme ressource
  2. Ajoutez une clé à votre fichier Info.plist appelée UIAppFonts.
  3. Faire de cette clé un tableau
  4. Pour chaque police que vous avez, entrez le nom complet de votre fichier de police (y compris l'extension) en tant qu'éléments du tableau UIAppFonts.
  5. Enregistrer Info.plist
  6. Maintenant, dans votre application, vous pouvez simplement appeler [UIFont fontWithName:@"CustomFontName" size:12] pour obtenir la police personnalisée à utiliser avec vos balises UILabels et UITextViews, etc.

Aussi: Assurez-vous que les polices sont dans vos ressources de copie de l'ensemble.

633
samvermette

Edit: à partir de iOS 3.2, cette fonctionnalité est intégrée. Si vous devez prendre en charge les versions antérieures à 3.2, vous pouvez toujours utiliser cette solution.

J'ai créé un module simple qui étend UILabel et gère le chargement des fichiers .ttf. Je l'ai publié opensource sous licence Apache et je l'ai mis sur github Here.

Les fichiers importants sont FontLabel.h et FontLabel.m.

Il utilise une partie du code de La réponse de Genericrich .

Parcourir la source Ici.

OR

  • Copiez votre fichier de police dans les ressources

  • Ajoutez une clé à votre fichier Info.plist appelée UIAppFonts. ("Polices fournies par l'application)

  • Faire de cette clé un tableau 

  • Pour chaque police que vous avez, entrez le nom complet de votre fichier de police (y compris l'extension) en tant qu'éléments du tableau UIAppFonts. 

  • Enregistrer Info.plist

  • Désormais, dans votre application, vous pouvez simplement appeler [UIFont fontWithName:@"CustomFontName" size:15] pour obtenir la police personnalisée à utiliser avec vos UILabels et UITextViews, etc.

Pour plus d'informations

296
commanda

Il existe un moyen simple d'utiliser des polices personnalisées dans iOS 4.

  1. Ajoutez votre fichier de police (par exemple, Chalkduster.ttf) au dossier Ressources du projet dans XCode.
  2. Ouvrez info.plist et ajoutez une nouvelle clé appelée UIAppFonts. Le type de cette clé doit être un tableau.
  3. Ajoutez votre nom de police personnalisé à ce tableau, y compris l’extension (Chalkduster.ttf).
  4. Vous pouvez maintenant utiliser [UIFont fontWithName:@"Chalkduster" size:16] dans votre application.

Malheureusement, IB n'autorise pas l'initialisation des étiquettes avec des polices personnalisées. Voir cette question pour résoudre ce problème. Ma solution préférée consiste à utiliser la sous-classe UILabel personnalisée:

@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

Dans Info.plist, ajoutez l'entrée "Polices fournies par l'application" et incluez les noms de police sous forme de chaînes:

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

Ensuite, vérifiez que votre police est incluse en exécutant:

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

Notez que votre nom de fichier ttf peut ne pas être identique à celui que vous utilisez lorsque vous définissez la police pour votre étiquette (vous pouvez utiliser le code ci-dessus pour obtenir le paramètre "fontWithName"):

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

edit: Cette réponse est caduque à partir de iOS3.2; utiliser UIAppFonts

Le seul moyen pour charger UIFonts personnalisé est de passer par la structure privée GraphicsServices.

Les éléments suivants chargeront toutes les polices .ttf dans le lot principal de l'application:

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

Une fois les polices chargées, vous pouvez les utiliser comme les polices fournies par Apple:

NSLog(@"Available Font Families: %@", [UIFont familyNames]);
[label setFont:[UIFont fontWithName:@"Consolas" size:20.0f]];

GraphicsServices peut même être chargé à l'exécution au cas où l'API disparaîtrait à l'avenir:

#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

Avec iOS 8 + et Xcode 6 +, vous pouvez le faire facilement. Voici les étapes:

1) Faites glisser votre police dans le dossier Xcode Supporting Files. N'oubliez pas de marquer votre application dans la section Ajouter aux cibles. À partir de ce moment, vous pouvez utiliser cette police dans IB et la choisir dans la palette des polices.

enter image description here

2) Pour que cette police soit disponible sur votre appareil, ouvrez votre info.plist et ajoutez la clé Fonts provided by application. Il contiendra la clé de l'élément 0, vous devez ajouter votre nom de police comme valeur. Le nom de la police peut varier de votre nom de fichier de police. Mais d’abord, essayez d’ajouter votre nom de fichier dans la plupart des cas, cela fonctionne. 

enter image description here

Sinon, cet article m'a toujours aidé.

Voici l'extrait Swift du code de cet article pour vous aider à trouver le nom de votre police.

func allFonts(){

   for family in UIFont.familyNames(){

       println(family)


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

   }

}

MODIFIER

Je tiens à mentionner que vous devez ajouter des fichiers de polices aux phases de construction de votre cible Target, Copy Bundle Resources. Sans cela, vous ne verrez pas votre police sur l'appareil. Et cela pourrait conduire à un comportement inattendu. 

Par exemple, je rencontre une bug, lorsque UITextField a une police personnalisée, mais cette police ne figurait pas dans Copy Bundle Resources. Et quand je passe à la viewcontroller avec cette textfield, il y a un délai d'environ 4 secondes avant que la fonction viewDidLoad ne soit appelée. La résolution des problèmes de polices a supprimé ce délai. Donc, recommande de vérifier deux fois. (rdar: // 20028250) Au fait, je n'ai pas pu reproduire le bogue, mais je suis sûr que le problème était dû à la police.

33
Dima Deplov

J'ai fait ça comme ça:

Chargez la police:

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

Maintenant, dans votre drawRect:, faites quelque chose comme ceci:

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

Fondamentalement, vous devez utiliser une force brute pour parcourir le texte et utiliser le nombre magique pour trouver votre décalage (ici, voyez-moi au 29) dans la police, mais cela fonctionne.

En outre, vous devez vous assurer que la police est légalement incorporable. La plupart ne le sont pas et il y a des avocats spécialisés dans ce genre de choses, alors soyez prévenus.

27
Genericrich

Si vous utilisez xcode 4.3, vous devez ajouter font à Build Phase sous Copy Bundle Resources, conformément à https://stackoverflow.com/users/1292829/arne dans le fil, Polices personnalisées Xcode 4.3 . Cela a fonctionné pour moi. Voici les étapes que j'ai suivies pour que les polices personnalisées fonctionnent dans mon application:

  1. Ajoutez la police à votre projet. J'ai fait glisser les fichiers OTF (ou TTF) vers un nouveau groupe que j'ai créé et accepté le choix de xcode de copying the files over to the project folder.
  2. Créez le tableau UIAppFonts avec vos polices répertoriées en tant qu'éléments dans le tableau. Juste la names, pas l’extension (par exemple "GothamBold", "GothamBold-Italic").
  3. Cliquez sur le chemin project name en haut du Project Navigator du côté gauche de l'écran.
  4. Cliquez sur l'onglet Build Phases qui apparaît dans la zone principale de xcode.
  5. Développez la section "Copy Bundle Resources" et cliquez sur "+" pour ajouter la police.
  6. Sélectionnez le fichier de police dans le navigateur de fichiers qui s'ouvre lorsque vous cliquez sur le "+".
  7. Faites cela pour chaque police que vous devez add to the project.
20
SKris

Oui, vous pouvez inclure des polices personnalisées. Reportez-vous à la documentation sur UIFont, plus précisément à la méthode fontWithName:size:.

1) Assurez-vous d'inclure la police dans votre dossier de ressources.

2) Le "nom" de la police n'est pas nécessairement le nom du fichier.

3) Assurez-vous d’avoir le droit légal d’utiliser cette police. En l'incluant dans votre application, vous le distribuez également et vous devez avoir le droit de le faire.

20
August

Il est très facile d'ajouter une nouvelle police sur votre application iOS existante.

Vous devez simplement ajouter la police, par exemple. font.ttf dans votre dossier de ressources.

Ouvrez votre application info.plist. Ajoutez une nouvelle ligne en tant que "Polices fournies par l'application" et tapez le nom de la police sous le nom font.ttf.

Et lorsque vous définissez la police, faites comme setFont:"corresponding Font Name"

Vous pouvez vérifier si votre police est ajoutée ou non par NSArray *check = [UIFont familyNames];.

Il renvoie toutes les polices prises en charge par votre application.

12
Subrat

Voici les instructions étape par étape pour le faire. Pas besoin de bibliothèque supplémentaire ni de codage spécial. 

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

La plupart du temps, le problème concerne la police et non la méthode. La meilleure façon de le faire est d’utiliser une police qui, comme Verdana ou Geogia, fonctionnera. Puis changez pour la police souhaitée. Si cela ne fonctionne pas, le nom de la police n'est peut-être pas correct ou la police n'est pas bien formatée.

12
5566

Je recommanderais de suivre l'un de mes courts tutoriels préférés ici: http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/ d'où proviennent ces informations.

Étape 1 - Faites glisser votre fichier .ttf ou .otf du Finder dans votre projet

REMARQUE - Assurez-vous de cocher la case "Ajouter aux cibles" sur la cible de votre application principale

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

Si vous avez oublié de cliquer sur pour l'ajouter à votre cible, cliquez sur le fichier de police dans la hiérarchie de votre projet et, dans le volet de droite, cliquez sur la cible principale de l'application dans la section Adhésion cible.

 how to add fonts to app target if you forgot

Pour vous assurer que vos polices font partie de votre cible d'application, assurez-vous qu'elles apparaissent dans votre Copier les ressources d'un ensemble dans Construire des phases

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

Étape 2 - Ajoutez les noms de fichier de police à votre Plist

Accédez à la Propriétés de la cible iOS personnalisée de votre section Info et ajoutez une clé aux éléments de cette section appelée Fonts provided by application (vous devriez la voir apparaître comme une option lorsque vous la tapez et cliquez sur la petite flèche pour ouvrir les éléments du tableau et tapez les noms des fichiers .ttf ou .otf que vous avez ajoutés pour indiquer à votre application que ces fichiers sont les fichiers de polices que vous souhaitez utiliser.

_ {NOTE - Si votre application se bloque juste après cette étape, vérifiez l'orthographe des éléments que vous ajoutez ici} _

 example plist with custom fonts added

Étape 3 - Trouvez le nom de vos polices pour pouvoir les appeler

Très souvent, le nom de police vu par votre application est différent de ce que vous pensez basé sur le nom de fichier de cette police, insérez-le dans votre code et examinez le journal créé par votre application pour voir quel nom de police appeler dans votre code.

Rapide

for family: String in UIFont.familyNames(){
  print("\(family)")
  for names: String in UIFont.fontNamesForFamilyName(family){
      print("== \(names)")
  }
}

Objectif c

for (NSString* family in [UIFont familyNames]){
    NSLog(@"%@", family);
    for (NSString* name in [UIFont fontNamesForFamilyName: family]){
        NSLog(@"  %@", name);
    }
}

Votre journal devrait ressembler à ceci:

 Example of searching log to find font names

Étape 4 - Utilisez votre nouvelle police personnalisée en utilisant le nom de l'étape 3

Rapide

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

Objectif c

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

Trouvez le fichier TTF dans le Finder et "Obtenir des informations". Sous la rubrique "Nom complet", cela m'a donné un nom que j'ai ensuite utilisé avec fontWithName (je viens de copier et coller le nom exact, dans ce cas aucune extension ".ttf" n'était nécessaire).

10
Nano

Remarque importante: vous devez utiliser le "nom PostScript" associé à la police, et non son nom complet ou son nom de famille. Ce nom peut souvent être différent du nom normal de la police.

8
user576862

Ce n'est pas encore sorti, mais la prochaine version de cocos2d (2d game framework) supportera les polices bitmap de longueur variable en tant que cartes de caractères. 

http://code.google.com/p/cocos2d-iphone/issues/detail?id=317

L’auteur n’a pas de date de sortie précise pour cette version, mais j’ai vu un message indiquant qu’elle le serait dans un ou deux mois.

8
John

Peut-être que l'auteur a oublié de donner à la police un nom Mac FOND ?

  1. Ouvrez la police dans FontForge puis allez à Élément> Informations sur la police.
  2. Il existe une option "Mac" où vous pouvez définir le nom FOND.
  3. Sous Fichier> Exporter la police, vous pouvez créer un nouveau fichier ttf.

Vous pouvez également essayer l’option "Apple" dans la boîte de dialogue d’exportation.

DISCLAIMER: Je ne suis pas un développeur IPhone!

6
ByteNirvana

suivez cette étape

1) Copiez votre police dans votre projet

2) ouvrez votre fichier .plist en mode code source ... (Remarque: ne pas ouvrir info.plist)

3) Avant cela - Faites un clic droit sur votre police et ouvrez-la dans fontforge ou un éditeur similaire et install dans votre système. Elle devrait être install

4) Tapez ceci

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

5) Tapez ce code dans votre class .m

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

Ici, les points seront changés à compter de votre UILabel

Fait !! Si votre police ne fonctionne toujours pas, vérifiez d'abord sa compatibilité. 

6
Kirtikumar A.

J'ai essayé les différentes suggestions de cette page sur iOS 3.1.2 et voici mes conclusions:

Utiliser simplement [UIFont fontWithName:size:] avec les polices du répertoire Resources ne fonctionnera pas, même si le nom FOND est défini à l'aide de FontForge.

[UIFont fontWithName:size:] fonctionnera si les polices sont chargées en premier à l'aide de GSFontAddFromFile. Mais GSFontAddFromFile ne fait pas partie d'iOS 3.1.2 et doit donc être chargé dynamiquement comme décrit par @rpetrich.

6
Jacob Wallström

J'ai combiné certains des conseils de cette page en un outil qui fonctionne pour moi sur iOS 5.

Tout d'abord, vous devez ajouter la police personnalisée à votre projet. Ensuite, vous devez suivre les conseils de @iPhoneDev et ajouter la police à votre fichier info.plist.

Après cela, cela fonctionne:

UIFont *yourCustomFont = [UIFont fontWithName:@"YOUR-CUSTOM-FONT-POSTSCRIPT-NAME" size:14.0];
[yourUILabel setFont:yourCustomFont];

Cependant, vous devez connaître le nom PostScript de votre police. Suivez simplement les conseils de @Daniel Wood et appuyez sur command-i pendant que vous êtes sur FontBook.

Ensuite, profitez de votre police personnalisée.

5
AaronBaker

Ajoutez d’abord la police au format .odt à vos ressources. Dans ce cas, nous utiliserons DINEngschriftStd.otf, puis nous utiliserons ce code pour attribuer la police à l’étiquette.

[theUILabel setFont:[UIFont fontWithName:@"DINEngschriftStd" size:21]];

Pour vous assurer que votre police est chargée dans le projet, appelez simplement

NSLog(@"Available Font Families: %@", [UIFont familyNames]);

Sur le .plist vous devez déclarer la police. Ajoutez simplement un enregistrement 'Polices fournies par l'application' et ajoutez une chaîne d'élément 0 avec le nom de la police (DINEngschriftStd.otf)

5
Alejandro Luengo

Pour iOS 3.2 et versions ultérieures: Utilisez les méthodes fournies par plusieurs méthodes ci-dessus, à savoir:

  1. Ajoutez votre fichier de police (par exemple, Chalkduster.ttf) au dossier Resources du projet en XCode.
  2. Ouvrez info.plist et ajoutez une nouvelle clé appelée UIAppFonts. Le type de cette clé doit être un tableau.
  3. Ajoutez votre nom de police personnalisé à ce tableau, y compris son extension ("Chalkduster.ttf").
  4. Utilisez [UIFont fontWithName:@"Real Font Name" size:16] dans votre application.

MAIS Le "Nom de police réel" n'est pas toujours celui que vous voyez dans Fontbook. Le meilleur moyen est de demander à votre appareil quelles polices il voit et quels sont les noms exacts.

J'utilise uifont-name-grabber posté à l'adresse: uifont-name-grabber

Déposez simplement les polices de votre choix dans le projet xcode, ajoutez le nom du fichier à sa pliste et exécutez-le sur le périphérique pour lequel vous créez, il vous enverra une liste complète des polices en utilisant les noms que UIFont fontWithName: attend.

5
Jarson

Une meilleure solution consiste à ajouter une nouvelle propriété "Fonts provided by application" à votre fichier info.plist

Ensuite, vous pouvez utiliser votre police personnalisée comme suit UIFont.

5
RichX

Regarde ATSApplicationFontsPath

Une simple entrée de pliste qui vous permet d'inclure le (s) fichier (s) de police dans le dossier de ressources de votre application et qu'ils "fonctionnent" dans votre application.

5
Matt Sephton

Il existe une nouvelle façon d'utiliser les polices personnalisées, à partir de iOS 4.1. Il vous permet de charger des polices de manière dynamique, à partir de fichiers inclus avec l'application, de données téléchargées ou de ce que vous avez. Il vous permet également de charger les polices selon vos besoins, tandis que l'ancienne méthode les charge toutes au démarrage de l'application, ce qui peut prendre trop de temps si vous avez plusieurs polices.

La nouvelle méthode est décrite à ios-dynamic-font-loading

Vous utilisez la fonction CTFontManagerRegisterGraphicsFont, en lui donnant une mémoire tampon avec vos données de police. Il est alors disponible pour UIFont et les vues Web, comme avec l'ancienne méthode. Voici l'exemple de code de ce lien:

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 façon: (fonctionne aussi avec Swift 2.0)

Ajoutez les polices requises à votre projet (comme pour l’ajout d’images, faites simplement glisser Xcode), assurez-vous qu’elles sont ciblées sur votre projet.
ajoute cette méthode et charge les polices personnalisées (recommandé dans 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: "")
    }

}

Exemple d'utilisation:

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

Utilisez la police:

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

Vous pouvez ajouter les fichiers "FONT" requis dans le dossier des ressources. Ensuite, allez dans le fichier Project Info.plist et utilisez la clé "Polices fournies par l'application" et la valeur "NOM DE LA POLICE".

Ensuite, vous pouvez appeler la méthode [UIFont fontwithName:@"FONT NAME" size:12];

2
Nishan29

oui, vous pouvez utiliser une police personnalisée dans votre application

pas à pas en suivant:

Ajoutez vos fichiers de polices personnalisés à votre projet dans les fichiers de support.

Ajoutez une clé à votre fichier Info.plist appelée UIAppFonts.

Faire de cette clé un tableau

Pour chaque police que vous avez, entrez le nom complet de votre fichier de police (y compris l'extension) en tant qu'éléments du tableau UIAppFonts.

Save Info.plist Maintenant dans votre application, vous pouvez simplement appeler [UIFont fontWithName: @ "votre nom de police personnalisé" taille: 20] pour obtenir la police personnalisée à utiliser avec vos UILabels Après l’appliquer si vous ne trouvez pas la police correcte, puis vous double-cliquez sur la police personnalisée et constatez soigneusement que le nom de la police apparaît en haut, puis copiez-la, collez-la ici [UIFont fontWithName: @ "cliquez ici après votre nom de police personnalisé" size: 20] 

j'espère que vous aurez la bonne réponse

1
Akhil Bhadauria

Bien que certaines des réponses ci-dessus soient correctes, j’ai rédigé un didacticiel visuel détaillé à l’intention des personnes qui rencontrent encore des problèmes de polices.

Les solutions ci-dessus vous invitant à ajouter la police au plist et à utiliser

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

sont les bons. S'il vous plaît, utilisez maintenant n'importe quelle autre méthode. Si vous rencontrez toujours des problèmes pour trouver des noms de polices et les ajouter, voici le didacticiel - 

Utilisation de polices personnalisées dans l'application ios

1
Bharat Gulati

J'ai tout fait possible mais les nouvelles polices n'apparaissent pas et j'ai donc trouvé la solution:

Lorsque vous faites glisser les fichiers fot (otf ou ttf), n'oubliez pas de cocher la case sous "Ajouter aux cibles".

Après quoi, votre police apparaîtra et tout fonctionnera correctement.

1
ElizaS

oui, vous pouvez utiliser une police personnalisée dans votre application

pas à pas en suivant:

  • Ajoutez vos fichiers de polices personnalisés à votre projet dans les fichiers de support.
  • Ajoutez une clé à votre fichier Info.plist appelée UIAppFonts.
  • Faire de cette clé un tableau
  • Pour chaque police que vous avez, entrez le nom complet de votre fichier de police (y compris l'extension) en tant qu'éléments du tableau UIAppFonts.
  • Enregistrez Info.plistMaintenant dans votre application, vous pouvez simplement appeler [UIFont fontWithName:@"your Custom font Name" size:20] pour obtenir la police personnalisée à utiliser avec votre UILabels 

après l’application de ceci si vous n’obtenez pas la police correcte Ensuite, vous double-cliquez sur la police personnalisée, et vous voyez attentivement le nom de la police sur la face supérieure, puis copiez-la. Collez cette police, collez-la ici [UIFont fontWithName:@" here past your Custom font Name" size:20] j'espère que vous aurez la bonne réponse

1
user2691469

Comme amélioration @ bdev's answer , voici une version mise à jour qui répertorie uniquement les polices personnalisées.

Étape 1: Découvrez toutes les polices du système en utilisant la réponse et l'enregistrement dans un fichier de @ bdev.

Placez le code suivant dans la première fonction -(void)viewDidLoad de View Controller's, après le [super viewDidLoad] (ou dans le délégué d'application):

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

Exécutez l'application une fois. Arrêtez-le après.

Étape 2: Ajouter une police personnalisée au projet

En utilisant la méthode indiquée dans la réponse acceptée, ajoutez vos polices personnalisées (n'oubliez pas de mettre à jour le .plist et ajoutez les fichiers de polices à créer en cochant Add To Target.

Étape 3: Comparer les polices système à la liste de polices actuelle

Remplacez les codes de l'étape 1 par:

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

Exécutez l'application pour afficher la liste des polices personnalisées que vous avez ajoutées.

Cela s'applique à iOS 3.2 jusqu'à iOS 6 (les versions futures fonctionnent probablement très bien). Fonctionne également avec .ttc et .ttf.

0
Raptor

Comme toutes les réponses précédentes l'ont indiqué, c'est très bien possible et assez facile dans les versions iOS les plus récentes.

Je sais que ce n’est pas une réponse technique, mais étant donné que beaucoup de gens le font de manière erronée (violant ainsi efficacement les licences qui peuvent vous coûter beaucoup d’argent si vous êtes poursuivi en justice), permettez-moi de mettre une réserve en évidence: Intégrer une coutume Dans une application iOS (ou de tout autre type), la police est fondamentalement redistribue la police. La plupart des licences de polices commerciales font interdisent redistribution, alors veuillez vous assurer que vous agissez conformément à la licence.

0
DrMickeyLauer