以前のアプリでカスタムフォントを使用しました。
ファイル名は「ProximaNova-Regular.otf」で、使用したフォントをロードします...
[UIFont fontWithName:@"ProximaNova-Regular" size:20];
これは完全に機能しました。
この新しいアプリには3つのフォントファイルがあります...
Dude_Willie.otf
Impact
handsean.ttf
しかし、私はこれらをロードする方法がわかりません。
私が試してみました
[UIFont fontWithName:<the file name> size:20];
しかし、これはHelveticaを使用することにフォールバックします。
使用する名前を見つけるにはどうすればよいですか?
次の4つの簡単な手順に従って、iOSアプリに新しいフォントを追加して使用します。
UIAppFonts
配列に追加します(このプレーンテキストは 'アプリケーションが提供するフォント ')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]
そして、あなたはビジネスをするべきです!TTFを右クリック->情報を取得
「フルネーム」はあなたが探しているものです。
それがTTFで私にとってうまくいったことです。
編集:
Get Infoの「Full Name」とは異なる名前のフォントを使用しました。
この回答をコンパイルするには、上記のクイックチェックが機能しない場合、プロジェクトで次のコードを実行します。
for (NSString *fontFamilyName in [UIFont familyNames]) {
for (NSString *fontName in [UIFont fontNamesForFamilyName:fontFamilyName]) {
NSLog(@"Family: %@ Font: %@", fontFamilyName, fontName);
}
}
そして、使用したいフォントの正しい名前を検索します。
Swift 3.0コード:
for fontFamilyName in UIFont.familyNames{
for fontName in UIFont.fontNames(forFamilyName: fontFamilyName){
print("Family: \(fontFamilyName) Font: \(fontName)")
}
}
iOSでフォントを使用するには、フォントのFULL NAME(PostScript Name)に基づいてフォントをロードする必要があります。 is)フォントの実際のファイル名とは異なります。
Fontファイル「Arial-regular.ttf」の名前を「foo.ttf」に変更することを想像してください。名前を変更したフォントファイル内に含まれるフォントは、「Arial-regular」のままです。
このスレッドで既にフォント名を取得するためのいくつかの優れたプログラム的な方法がありますが、コマンドラインを使用した別のアプローチがあります。
MacまたはLinuxを使用している場合、カスタムフォントがあるディレクトリのコマンドラインからこのスクリプトを実行します(既にインストールされている fontconfig のfc-scan
ユーティリティを使用します。しかし、そうでない場合は、homebrew経由でインストールできます:brew install fontconfig
):
for file in "$arg"*.{ttf,otf}; do fc-scan --format "%{postscriptname}\n" $file; done
~/Library/Fonts
ディレクトリで実行されている上記のコマンドのスクリーンショットは次のとおりです。
上記のスクリプトは、現在のディレクトリにあるすべての.ttf
および.otf
ファイルを実行し、PostScript Nameを出力しますXCodeまたは他の場所でフォントファイルを参照するために使用できる各フォント。
いくつかの追加情報(PostScriptName、Filename)といくつかの色分けを使いたい場合は、次の代替スクリプトを実行できます。
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
これは、新しいフォントファイルを追加するたびに名前を印刷するAppDelegate.mファイル内にコードをコピーアンドペーストするよりも少し高速です。これは一般的な方法であり、FontBookのFontを開くよりも高速です。 PostScript名を調べます。
便利なヒント:ターミナルで上記のスクリプトをエイリアス化して、すべてのPostScriptフォント名を取得する単一のコマンドを入力するだけでよい場合現在のディレクトリ内のすべてのファイル(私の関数はfontnames
と呼ばれるため、フォントを含むディレクトリ内のターミナルでfontnames
と入力するだけで、PostScript名が出力されます。自動的に、開発ワークフローの時間を節約し、この便利なスクリプトを必要なときにすぐに使用できるようにします。
お役に立てれば!
このために名前を取得する方法を知りたい:-
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]);
}
}
それがあなたを助けることを願っています...
Swift 3.0
for familyName in UIFont.familyNames {
for fontName in UIFont.fontNames(forFamilyName: familyName ) {
print("\(familyName) : \(fontName)")
}
}
Swift 4.0 +ソリューション
for fontFamilyName in UIFont.familyNames {
print("family: \(fontFamilyName)\n")
for fontName in UIFont.fontNames(forFamilyName: fontFamilyName) {
print("font: \(fontName)")
}
}
出力されます:
ファミリー:Apple SD Gothic Neo
フォント:AppleSDGothicNeo-Thin
フォント:AppleSDGothicNeo-Light
プロジェクト/アプリにフォントを追加した後、アプリで利用可能なすべてのフォントを印刷するために、このコードを追加します(おそらくアプリデリゲートdidFinishLaunchingWithOptionsメソッドに追加します)。そのリストから、目的のフォントを識別できるはずです。その後、不要なコードを削除することを忘れないでください。
for (NSString *fontFamilyName in [UIFont familyNames]) {
for (NSString *fontName in [UIFont fontNamesForFamilyName:fontFamilyName]) {
NSLog(@"Family: %@ Font: %@", fontFamilyName, fontName);
}
}
特定のフォントファイルのフォント名をプログラムで検索する場合:
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
}
必要に応じて、独自のスロー可能Error
オブジェクトに置き換えます。
Swift 1.2:
for familyName in UIFont.familyNames() {
for fontName in UIFont.fontNamesForFamilyName(familyName as! String) {
println("\(familyName) : \(fontName)")
}
}
Otfinfo --info arial.ttfを使用して、コマンドラインから名前を取得することもできます。ポストスクリプト名は、UIFontコンストラクターに渡す必要がある名前です。
フォントファイルのfamilyNamesをログに記録してから、フォントにアクセスします。
// You can log all font family names suing **fontNamesForFamilyName**
NSLog(@" font name %@", [UIFont fontNamesForFamilyName:@"the file name"]);
お役に立てば幸いです。
エミュレーターまたはデバイスのいずれかに存在するすべてのデフォルトフォントをスキャンする必要のないもう1つの「迅速で実用的な」ハックは、ストーリーボードの何かにフォントを使用することです。テキストエディタでストーリーボードを編集する場合、「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>
macOSとSwift 4.1のフォント名とファミリを一覧表示します:
NSFontManager.shared.availableFonts.map { print($0) }
NSFontManager.shared.availableFontFamilies.map { print($0) }