J'ai utilisé une police personnalisée dans mon application précédente.
Le nom du fichier était "ProximaNova-Regular.otf" et pour charger la police que je viens d'utiliser ...
[UIFont fontWithName:@"ProximaNova-Regular" size:20];
Cela a parfaitement fonctionné.
Maintenant, dans cette nouvelle application, j'ai trois fichiers de polices ...
Dude_Willie.otf
Impact
handsean.ttf
Mais je ne sais pas comment les charger.
J'ai essayé
[UIFont fontWithName:<the file name> size:20];
Mais cela revient simplement à utiliser Helvetica.
Comment puis-je trouver quel nom utiliser?
Suivez ces quatre étapes simples pour ajouter et utiliser une nouvelle police dans votre application iOS:
UIAppFonts
(le texte en clair pour celui-ci est 'Polices fournies par l'application')for(NSString *fontfamilyname in [UIFont familyNames]) { NSLog(@"family:'%@'",fontfamilyname); for(NSString *fontName in [UIFont fontNamesForFamilyName:fontfamilyname]) { NSLog(@"\tfont:'%@'",fontName); } NSLog(@"-------------"); }
UIFont *myNewFont = [UIFont fontWithName:@"font_name_from_debug_output" size:20]
et vous devriez être en affaires!Faites un clic droit sur le TTF -> Obtenir des informations
"Nom complet" est ce que vous recherchez.
C'est ce qui a fonctionné pour moi avec les TTF.
Modifier:
Je viens d'utiliser une police qui a un nom différent du "Nom complet" dans Obtenir des informations.
Pour la compilation de cette réponse, si la vérification rapide ci-dessus ne fonctionne pas, exécutez ce code dans votre projet:
for (NSString *fontFamilyName in [UIFont familyNames]) {
for (NSString *fontName in [UIFont fontNamesForFamilyName:fontFamilyName]) {
NSLog(@"Family: %@ Font: %@", fontFamilyName, fontName);
}
}
Et recherchez le nom correct de la police que vous souhaitez utiliser.
Swift 3.0 code:
for fontFamilyName in UIFont.familyNames{
for fontName in UIFont.fontNames(forFamilyName: fontFamilyName){
print("Family: \(fontFamilyName) Font: \(fontName)")
}
}
Pour utiliser les polices dans iOS, vous devez charger la police en fonction de son nom Nom complet (Nom PostScript), qui est parfois (et est généralement) différent de la police NOM DU FICHIER.
Imaginez-vous en train de renommer le fichier de police "Arial-regular.ttf" en "foo.ttf". La police contenue dans le fichier de police que vous venez de renommer est toujours "Arial-régulier".
Il existe de bonnes méthodes de programmation pour obtenir le nom de la police déjà sur ce fil, mais mon approche est différente en utilisant la ligne de commande.
Si vous êtes sur Mac ou Linux, exécutez simplement ce script à partir de la ligne de commande dans le répertoire contenant vos polices personnalisées (utilisez l'utilitaire fc-scan
de fontconfig qui est probablement déjà installé, mais vous pouvez également l'installer. via homebrew: brew install fontconfig
):
for file in "$arg"*.{ttf,otf}; do fc-scan --format "%{postscriptname}\n" $file; done
Voici une capture d'écran de la commande ci-dessus s'exécutant sur mon répertoire ~/Library/Fonts
:
Le script ci-dessus parcourt tous les fichiers .ttf
et .otf
du répertoire en cours, puis affiche le Nom PostScript pour chaque police que vous pouvez utiliser pour référencer le fichier de police dans XCode ou ailleurs.
Si vous souhaitez obtenir des informations supplémentaires avec des informations supplémentaires (PostScriptName, Nom du fichier) et des codes de couleur, vous pouvez exécuter ce script alternatif:
for file in "$arg"*.{ttf,otf}; do
postscriptname=$(fc-scan --format "%{postscriptname}\n" $file);
printf "\033[36m PostScript Name:\033[0m %s \e[90m(%s)\033[0m\n" "$postscriptname" "$file";
done
C’est un peu plus rapide que le copier-coller de votre fichier AppDelegate.m pour imprimer les noms à chaque fois que vous souhaitez ajouter un nouveau fichier de police, méthode couramment utilisée. Il est également plus rapide que d’ouvrir la police dans FontBook inspecter le nom PostScript.
CONSEIL UTILE: Si vous appelez le script ci-dessus dans votre terminal, il vous suffit de taper une seule commande pour obtenir tous les noms de police PostScript de tous les fichiers du répertoire en cours (ma fonction est appelée fontnames
donc tout ce que je dois faire est de taper fontnames
au terminal dans le répertoire contenant les polices, et les noms PostScript seront automatiquement imprimés, vous gagnerez du temps dans votre processus de développement et aurez ce script pratique prêt à être utilisé à tout moment il.
J'espère que cela t'aides!
Vous voulez savoir comment obtenir un nom pour cela: -
NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]];
for (NSInteger indFamily=0; indFamily<[familyNames count]; ++indFamily)
{
NSLog(@"Family name: %@", [familyNames objectAtIndex:indFamily]);
NSArray *fontNames = [[NSArray alloc] initWithArray:
[UIFont fontNamesForFamilyName:[familyNames objectAtIndex:indFamily]]];
for (NSInteger indFont=0; indFont<[fontNames count]; ++indFont)
{
NSLog(@" Font name: %@", [fontNames objectAtIndex:indFont]);
}
}
espérons que cela vous aide ...
Swift 3.0
for familyName in UIFont.familyNames {
for fontName in UIFont.fontNames(forFamilyName: familyName ) {
print("\(familyName) : \(fontName)")
}
}
Après avoir ajouté vos polices à votre projet/application, ajoutez ce code (probablement uniquement dans la méthode du délégué d'application didFinishLaunchingWithOptions) afin d'imprimer toutes les polices disponibles pour votre application. À partir de cette liste, vous devriez pouvoir identifier la police que vous recherchez. N'oubliez pas de supprimer le code inutile après.
for (NSString *fontFamilyName in [UIFont familyNames]) {
for (NSString *fontName in [UIFont fontNamesForFamilyName:fontFamilyName]) {
NSLog(@"Family: %@ Font: %@", fontFamilyName, fontName);
}
}
Swift 1.2:
for familyName in UIFont.familyNames() {
for fontName in UIFont.fontNamesForFamilyName(familyName as! String) {
println("\(familyName) : \(fontName)")
}
}
Swift 4.0+ solution
for fontFamilyName in UIFont.familyNames {
print("family: \(fontFamilyName)\n")
for fontName in UIFont.fontNames(forFamilyName: fontFamilyName) {
print("font: \(fontName)")
}
}
Est-ce que la sortie:
famille: Apple SD Gothic Neo
police: AppleSDGothicNeo-Thin
police: AppleSDGothicNeo-Light
Vous pouvez également utiliser otfinfo --info arial.ttf pour obtenir le nom depuis la ligne de commande. Le nom postscript est celui que vous devez transmettre au constructeur UIFont.
Si vous souhaitez rechercher le nom de la police pour un fichier de police donné par programme:
import Foundation
func loadFontName(for file: URL) throws -> String {
let data = try Data(contentsOf: file)
guard let provider = CGDataProvider(data: data as CFData) else {
throw Error("Could not create data provider")
}
guard let font = CGFont(provider) else {
throw Error("Could not load font")
}
guard let name = font.postScriptName else {
throw Error("Could not get font name from font file")
}
return name as String
}
Remplacez-le par vos propres objets Error
et jetables selon vos besoins.
Enregistrez les noms de famille du fichier de police, puis accédez aux polices:
// You can log all font family names suing **fontNamesForFamilyName**
NSLog(@" font name %@", [UIFont fontNamesForFamilyName:@"the file name"]);
J'espère que ça vous aide.
Une autre astuce "rapide et pratique" qui n'implique pas l'analyse de toutes les polices par défaut existant sur l'émulateur ou le périphérique consiste à utiliser la police pour un élément de votre story-board. Ensuite, si vous éditez le storyboard avec un éditeur de texte, vous pouvez voir les polices utilisées avec les noms "internes" si vous recherchez la balise "customFonts":
<customFonts key="customFonts">
<array key="Linotype - AvenirNextLTPro-Bold.otf">
<string>AvenirNextLTPro-Bold</string>
</array>
<array key="Linotype - AvenirNextLTPro-Regular.otf">
<string>AvenirNextLTPro-Regular</string>
</array>
<array key="TradeGothicLTPro-BdCn20.otf">
<string>TradeGothicLTPro-BdCn20</string>
</array>
</customFonts>
Liste des noms de polices et des familles pour macOS avec Swift 4.1 :
NSFontManager.shared.availableFonts.map { print($0) }
NSFontManager.shared.availableFontFamilies.map { print($0) }