テキストをレンダリングするためのカスタム フォントをアプリに含めてロードしUIKit
、UILabel
. これは可能ですか?
32 に答える
iOS3.2以降はこれをサポートしています。iPhone OS3.2の新機能に関するドキュメントから直接:
カスタムフォントのサポートカスタムフォント
を使用するアプリケーションは、アプリケーションバンドルにそれらのフォントを含め、Info.plistファイルにUIAppFontsキーを含めることで、それらのフォントをシステムに登録できるようになりました。このキーの値は、アプリケーションのバンドル内のフォントファイルを識別する文字列の配列です。システムがキーを認識すると、指定されたフォントが読み込まれ、アプリケーションで使用できるようになります。
でフォントを設定するとInfo.plist
、カスタムフォントをIBまたはプログラムで他のフォントと同じように使用できます。
Apple Developer Forumsには進行中のスレッドがあります:
https ://devforums.apple.com/thread/37824 (ログインが必要です)
そして、これを達成する方法についての優れたシンプルな3ステップのチュートリアルがあります(壊れたリンクは削除されました)
- Xcodeをリソースとして使用して、カスタムフォントファイルをプロジェクトに追加します
Info.plist
という名前のキーをファイルに追加しますUIAppFonts
。- このキーを配列にします
- 使用しているフォントごとに、フォントファイルのフルネーム(拡張子を含む)を
UIAppFonts
配列の項目として入力します - 保存する
Info.plist
- これで、アプリケーションで呼び出すだけで、 UILabelsやUITextViews
[UIFont fontWithName:@"CustomFontName" size:12]
などで使用するカスタムフォントを取得できます…</ li>
また、フォントがコピーバンドルリソースに含まれていることを確認してください。
編集: iOS 3.2 以降、この機能は組み込まれています。3.2 より前のバージョンをサポートする必要がある場合でも、このソリューションを使用できます。
UILabel
.ttf ファイルのロードを拡張して処理する単純なモジュールを作成しました。私はそれを Apache ライセンスの下でオープンソースとしてリリースし、github Here に置きました。
重要なファイルはFontLabel.h
とFontLabel.m
.
Genericrich's answerのコードの一部を使用しています。
ここでソースを参照してください。
また
フォント ファイルをリソースにコピーする
Info.plist
UIAppFonts というファイルにキーを追加します。(「アプリ提供フォント」)このキーを配列にする
持っているフォントごとに、フォント ファイルの完全な名前 (拡張子を含む) を項目として UIAppFonts 配列に入力します。
保存
Info.plist
これで、アプリケーションで を呼び出すだけで、やなど
[UIFont fontWithName:@"CustomFontName" size:15]
で使用するカスタム フォントを取得できます…</p>UILabels
UITextViews
iOS 4でカスタム フォントを使用する簡単な方法があります。
- フォント ファイル (たとえば、
Chalkduster.ttf
) をXCode のプロジェクトのResourcesフォルダーに追加します。 info.plist
という新しいキーを開いて追加しますUIAppFonts
。このキーの型は配列でなければなりません。- 拡張子 (
Chalkduster.ttf
) を含むカスタム フォント名をこの配列に追加します。 - これで、アプリケーションで使用でき
[UIFont fontWithName:@"Chalkduster" size:16]
ます。
残念ながら、IB はカスタム フォントでラベルを初期化することを許可していません。この問題を解決するには、この質問を参照してください。私のお気に入りの解決策は、カスタムUILabel
サブクラスを使用することです。
@implementation CustomFontLabel
- (id)initWithCoder:(NSCoder *)decoder
{
if (self = [super initWithCoder: decoder])
{
[self setFont: [UIFont fontWithName: @"Chalkduster" size: self.font.pointSize]];
}
return self;
}
@end
Info.plistに「アプリケーションによって提供されるフォント」というエントリを追加し、フォント名を文字列として含めます。
Fonts provided by application
Item 0 myfontname.ttf
Item 1 myfontname-bold.ttf
...
次に、以下を実行して、フォントが含まれていることを確認します。
for (NSString *familyName in [UIFont familyNames]) {
for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
NSLog(@"%@", fontName);
}
}
ttfファイル名は、ラベルのフォントを設定するときに使用する名前とは異なる場合があることに注意してください(上記のコードを使用して「fontWithName」パラメーターを取得できます)。
[label setFont:[UIFont fontWithName:@"MyFontName-Regular" size:18]];
iOS 8
+ と+ を使えばXcode 6
簡単に作れます。手順は次のとおりです。
Xcode
1) フォントをSupporting Files フォルダにドラッグ アンド ドロップします。[ターゲットに追加]セクションでアプリをマークすることを忘れないでください。この時点から、このフォントを使用しIB
て、フォント パレットから選択できます。
2) このフォントをデバイスで使用できるようにするには、ファイルを開いてキーinfo.plist
を追加しFonts provided by application
ます。これには Item 0 キーが含まれます。フォント名を値として追加する必要があります。フォント名は、フォント ファイル名とは異なる場合があります。ただし、最初に、ほとんどの場合、ファイル名を追加してみてください。
そうでない場合、この記事は常に私を助けてくれました。
フォント名を見つけるのに役立つ、この記事のコードのスニペットを次に示します。
func allFonts(){
for family in UIFont.familyNames(){
println(family)
for name in UIFont.fontNamesForFamilyName(family.description)
{
println(" \(name)")
}
}
}
編集
Target の Build Phases、Copy Bundle Resourcesにフォント ファイルを追加する必要があることに注意してください。これがないと、デバイスにフォントが表示されません。また、予期しない動作につながる可能性があります。
たとえば、カスタム フォントがあるbug
ときにUITextField
が表示されますが、このフォントはCopy Bundle Resourcesにありませんでした。そして、viewcontroller
これで にセグエすると、関数が呼び出されるtextfield
までに約 4 秒の遅延があります。viewDidLoad
フォントの問題を解決することで、この遅延は解消されました。そのため、2 回確認することをお勧めします。(rdar://20028250) ところで、バグを再現することはできませんでしたが、フォントに問題があったことは確かです。
私はこれを次のようにしました:
フォントをロードします。
- (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:
で、次のようにします。
-(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]);
}
基本的に、フォント内のオフセット (ここでは 29 を使用しているのを参照) を見つけるために、テキストをループしてマジック ナンバーを操作する必要がありますが、うまくいきます。
また、フォントが合法的に埋め込み可能であることを確認する必要があります。ほとんどはそうではなく、この種のことを専門とする弁護士もいますので、注意してください.
はい、カスタム フォントを含めることができます。UIFont のドキュメント、具体的にはfontWithName:size:
メソッドを参照してください。
1) リソース フォルダーにフォントが含まれていることを確認します。
2) フォントの「名前」は必ずしもファイル名ではありません。
3) そのフォントを使用する法的権利があることを確認してください。それをアプリに含めることで、それを配布することにもなり、それを行う権利が必要になります。
を使用している場合は、スレッドCustom Fonts Xcode 4.3のhttps://stackoverflow.com/users/1292829/arneに従って、を下xcode 4.3
に追加する必要があります。これは私にとってはうまくいきました。アプリでカスタムフォントを機能させるために行った手順は次のとおりです。font
Build Phase
Copy Bundle Resources
- プロジェクトにフォントを追加します。
OTF
(または) ファイルを作成した新しいグループにドラッグ アンド ドロップし、TTF
xcode の選択を受け入れましたcopying the files over to the project folder
。 UIAppFonts
配列内のアイテムとしてリストされているフォントを使用して配列を作成します。拡張子names
ではなく、 のみ (例: "GothamBold
"、"GothamBold-Italic
")。- 画面左側
project name
の上部にあるウェイをクリックします。Project Navigator
Build Phases
xcode のメイン領域に表示されるタブをクリックします。- 「
Copy Bundle Resources
」セクションを展開し、 をクリックし"+"
てフォントを追加します。 - をクリックすると開くファイルナビゲーターからフォントファイルを選択します
"+"
。 - 必要なすべてのフォントに対してこれを行います
add to the project
。
ここで私のお気に入りの短いチュートリアルの 1 つに従うことをお勧めします。
ステップ 1 - .ttf または .otf を Finder からプロジェクトにドラッグします
注 - メイン アプリケーション ターゲットの [ターゲットに追加] ボックスをクリックしてください。
クリックしてターゲットに追加するのを忘れた場合は、プロジェクト階層のフォント ファイルをクリックし、右側のパネルで [ターゲット メンバーシップ]セクションのメイン アプリ ターゲットをクリックします。
フォントがアプリ ターゲットの一部であることを確認するには、ビルド フェーズのコピー バンドル リソースにフォントが表示されるようにします。
ステップ 2 - フォント ファイル名を Plist に追加する
情報セクションのカスタム iOS ターゲット プロパティに移動し、そのセクション内の項目にキーを追加します(入力時にオプションとして表示され、配列として設定されます。小さな矢印をクリックします配列項目を開き、追加した .ttf または .otf ファイルの名前を入力して、これらが使用したいフォント ファイルであることをアプリに知らせます。Fonts provided by application
注 - この手順の直後にアプリがクラッシュする場合は、ここに追加した項目のスペルを確認してください
ステップ 3 - フォントの名前を調べて、呼び出すことができるようにします
多くの場合、アプリケーションで表示されるフォント名は、そのフォントのファイル名に基づいていると思われるものとは異なります。これをコードに入れ、アプリケーションが作成するログを調べて、コードで呼び出すフォント名を確認します。
迅速
for family: String in UIFont.familyNames(){
print("\(family)")
for names: String in UIFont.fontNamesForFamilyName(family){
print("== \(names)")
}
}
オブジェクティブ C
for (NSString* family in [UIFont familyNames]){
NSLog(@"%@", family);
for (NSString* name in [UIFont fontNamesForFamilyName: family]){
NSLog(@" %@", name);
}
}
ログは次のようになります。
ステップ 4 - ステップ 3 の名前を使用して新しいカスタム フォントを使用する
迅速
label.font = UIFont(name: "SourceSansPro-Regular", size: 18)
オブジェクティブ C
label.font = [UIFont fontWithName:@"SourceSansPro-Regular" size:18];
これがその方法のステップバイステップの説明です。追加のライブラリや特別なコーディングは必要ありません。
http://shang-liang.com/blog/custom-fonts-in-ios4/
ほとんどの場合、問題はメソッドではなくフォントにあります。そのための最良の方法は、verdanaやgeogiaなど、確実に機能するフォントを使用することです。次に、目的のフォントに変更します。それが機能しない場合は、フォント名が正しくないか、フォントが適切にフォーマットされていない可能性があります。
既存の iOS アプリに新しいフォントを追加するのは非常に簡単です。
リソース フォルダに font.ttf などのフォントを追加するだけです。
アプリケーションを開きますinfo.plist
。「アプリケーションによって提供されるフォント」として新しい行を追加し、フォント名を font.ttf として入力します。
そして、フォントを設定するときは次のようにしますsetFont:"corresponding Font Name"
フォントが追加されているかどうかは、 で確認できますNSArray *check = [UIFont familyNames];
。
アプリケーションがサポートするすべてのフォントを返します。
ファインダーでTTFを見つけて、「情報を見る」。「氏名:」という見出しの下に名前が表示され、それを使用しましたfontWithName
(正確な名前をコピーして貼り付けただけです。この場合、「.ttf」拡張子は必要ありません)。
まだリリースされていませんが、cocos2d (2D ゲーム フレームワーク) の次のバージョンでは、文字マップとして可変長ビットマップ フォントがサポートされる予定です。
http://code.google.com/p/cocos2d-iphone/issues/detail?id=317
著者は、このバージョンの正確なリリース日を持っていませんが、次の 1 ~ 2 か月でリリースされることを示す投稿を見ました。
1 つの重要な注意: フォントのフル ネームやファミリー ネームではなく、フォントに関連付けられた "PostScript 名" を使用する必要があります。この名前は、多くの場合、フォントの通常の名前とは異なる場合があります。
この手順に従ってください
1)プロジェクトにフォントをコピーします
2).plist
ソースコードモードでファイルを開きます...(注 - 開かないでくださいinfo.plist
)
3) その前に - フォントを右クリックして FontForge または同様のエディタで開き install
、システムでそれを開きます。install
4)これを入力してください
<key>UIAppFonts</key>
<array>
<string>MyriadPro.otf</string>
</array>
5) このコードをclass .m
[lblPoints setFont:[UIFont fontWithName:@"Myriad Pro" size:15.0]];
ここで lblPoints はあなたの時点で変更されますUILabel
終わり!!それでもフォントが機能しない場合は、最初にフォントの互換性を確認してください
作者がフォントにMac FOND という名前を付けるのを忘れたのではないでしょうか?
- FontForgeでフォントを開き、[要素] > [フォント情報] に移動します。
- FOND 名を設定できる「Mac」オプションがあります。
- [File] > [Export Font] の下で、新しい ttf を作成できます
エクスポート ダイアログの「Apple」オプションを試してみることもできます。
免責事項: 私は iPhone の開発者ではありません。
iOS 3.1.2 でこのページのさまざまな提案を試してみましたが、これらが私の結論です。
FontForge を使用して FOND 名が設定されていても、単に[UIFont fontWithName:size:]
Resources ディレクトリ内のフォントを使用するだけでは機能しません。
[UIFont fontWithName:size:]
GSFontAddFromFile を使用してフォントが最初に読み込まれる場合に機能します。ただしGSFontAddFromFile
、iOS 3.1.2 の一部ではないため、@rpetrich の説明に従って動的にロードする必要があります。
見上げるATSApplicationFontsPath
フォントファイルをアプリリソースフォルダーに含めることができる単純なplistエントリであり、それらはアプリで「正常に機能」します。
このページのアドバイスのいくつかを、iOS 5 で動作するものにまとめました。
まず、カスタム フォントをプロジェクトに追加する必要があります。次に、@iPhoneDev のアドバイスに従い、フォントを info.plist ファイルに追加する必要があります。
あなたがそれをした後、これは動作します:
UIFont *yourCustomFont = [UIFont fontWithName:@"YOUR-CUSTOM-FONT-POSTSCRIPT-NAME" size:14.0];
[yourUILabel setFont:yourCustomFont];
ただし、フォントの Postscript 名を知る必要があります。@Daniel Wood のアドバイスに従い、FontBook で command-i を押してください。
次に、カスタム フォントをお楽しみください。
最初にフォントを .odt 形式でリソースに追加します。この場合は DINEngschriftStd.otf を使用し、次にこのコードを使用してフォントをラベルに割り当てます。
[theUILabel setFont:[UIFont fontWithName:@"DINEngschriftStd" size:21]];
フォントがプロジェクトにロードされていることを確認するには、単に呼び出します
NSLog(@"Available Font Families: %@", [UIFont familyNames]);
.plist では、フォントを宣言する必要があります。「アプリケーションによって提供されるフォント」レコードを追加し、フォントの名前を含む項目 0 文字列を追加するだけです (DINEngschriftStd.otf)
より良い解決策は、新しいプロパティ " Fonts provided by application
" をinfo.plist
ファイルに追加することです。
その後、通常のようにカスタム フォントを使用できますUIFont
。
iOS 4.1以降、カスタムフォントを使用する新しい方法があります。アプリに含まれているファイル、ダウンロードしたデータ、またはあなたが持っているものから、フォントを動的にロードすることができます。また、必要に応じてフォントをロードすることもできますが、古い方法ではアプリの起動時にすべてのフォントをロードするため、フォントが多い場合は時間がかかりすぎる可能性があります。
新しいメソッドは、ios-dynamic-font-loadingで説明されています
この関数を使用しCTFontManagerRegisterGraphicsFont
て、フォントデータを含むバッファーを指定します。その後UIFont
、古い方法と同じように、Webビューで使用できるようになります。そのリンクのサンプルコードは次のとおりです。
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);
上記の回答のいくつかは正しいものですが、フォントにまだ問題がある人のために、詳細なビジュアル チュートリアルを作成しました。
フォントをplistに追加して使用するように指示する上記のソリューション
[self.labelOutlet setFont:[UIFont fontWithName:@"Sathu" size:10]];
は正しいものです。他のハックな方法を使用してください。フォント名の検索と追加でまだ問題が発生している場合は、チュートリアルをご覧ください -
すべてを可能にしましたが、新しいフォントが表示されないため、解決策を見つけました:
fot ファイル (otf または ttf) をドラッグするときは、[ターゲットに追加] の下のチェックボックスをオンにすることを忘れないでください。
これを行うと、フォントが表示され、すべてが正常に機能します。
はい、アプリケーションでカスタム フォントを使用できます
段階的にそこに従ってください:
カスタム フォント ファイルをプロジェクトのサポート ファイルに追加します。
UIAppFonts という Info.plist ファイルにキーを追加します。
このキーを配列にする
持っているフォントごとに、フォント ファイルの完全な名前 (拡張子を含む) を項目として UIAppFonts 配列に入力します。
Info.plist を保存 アプリケーションで [UIFont fontWithName:@"your Custom font Name" size:20] を呼び出すだけで、これを適用した後に UILabels で使用するカスタム フォントを取得できます。正しいフォントを取得できない場合は、ダブルクリックします。カスタムフォントで、上部のフォント名が来ていることを注意深く確認し、このフォントをコピーしてここに貼り付けます [UIFont fontWithName:@" here past your Custom font Name" size:20]
あなたが正しい答えを得ることを願っています