テキストレンダリング用のカスタムフォントをアプリに含め、それを読み込んでから、などの標準UIKit
要素で使用したいと思いUILabel
ます。これは可能ですか?
テキストレンダリング用のカスタムフォントをアプリに含め、それを読み込んでから、などの標準UIKit
要素で使用したいと思いUILabel
ます。これは可能ですか?
回答:
iOS 3.2以降はこれをサポートしています。ストレートからiPhone OS 3.2の新機能ドキュメント:
カスタムフォントのサポートカスタムフォント
を使用するアプリケーションは、それらのフォントをアプリケーションバンドルに含め、UIAppFontsキーをInfo.plistファイルに含めることで、それらのフォントをシステムに登録できるようになりました。このキーの値は、アプリケーションのバンドル内のフォントファイルを識別する文字列の配列です。システムはキーを認識すると、指定されたフォントをロードし、アプリケーションで使用できるようにします。
でフォントを設定しInfo.plist
たら、カスタムフォントをIB内またはプログラムで他のフォントとして使用できます。
Apple Developer Forumsに進行中のスレッドがあります:
https : //devforums.apple.com/thread/37824(ログインが必要です)
そしてこれはこれを達成する方法に関する優れたシンプルな3ステップのチュートリアルです(壊れたリンクは削除されました)
Info.plist
と呼ばれるファイルにキーを追加しますUIAppFonts
。UIAppFonts
配列に入力しますInfo.plist
[UIFont fontWithName:@"CustomFontName" size:12]
で、UILabelsやUITextViewsなどで使用するカスタムフォントを取得できます。また、フォントがコピーバンドルリソースにあることを確認してください。
編集:iOS 3.2以降、この機能は組み込まれています。3.2より前のバージョンをサポートする必要がある場合でも、このソリューションを使用できます。
UILabel
.ttfファイルのロードを拡張および処理する単純なモジュールを作成しました。私は、Apacheライセンスの下でオープンソースをリリースし、ここ githubに置きました。
重要なファイルはFontLabel.h
およびFontLabel.m
です。
Genericrichの回答のコードの一部を使用しています。
または
フォントファイルをリソースにコピーする
Info.plist
UIAppFontsという名前のキーをファイルに追加します。(「アプリケーションによって提供されるフォント)
このキーを配列にする
お持ちのフォントごとに、フォントファイルの完全な名前(拡張子を含む)を項目としてUIAppFonts配列に入力します
セーブ Info.plist
これで、アプリケーションでを呼び出し[UIFont fontWithName:@"CustomFontName" size:15]
て、UILabels
and UITextViews
などで使用するカスタムフォントを取得できます。
iOS 4でカスタムフォントを使用する簡単な方法があります。
Chalkduster.ttf
)をリソースに追加するXCodeでプロジェクトのフォルダーに。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]];
編集:この回答はiOS3.2の時点では無効です。UIAppFontsを使用する
カスタムを正常にロードできる唯一の方法UIFont
は、プライベートGraphicsServicesフレームワークを使用することです。
以下は.ttf
、アプリケーションのメインバンドル内のすべてのフォントをロードします。
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;
}
フォントが読み込まれると、Apple提供のフォントと同じように使用できます。
NSLog(@"Available Font Families: %@", [UIFont familyNames]);
[label setFont:[UIFont fontWithName:@"Consolas" size:20.0f]];
GraphicsServicesは、APIが将来なくなる場合に備えて、実行時にロードすることもできます。
#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;
}
[NSString sizeWithFont:[UIFont fontWithName:@"customFont" size:14]];
私が試したカスタムフォントの幅と高さを0 を返すことにも注意してください。
iOS 8
+とXcode 6
+、あなたはこれを簡単に行うことができます。手順は次のとおりです。
1)フォントをXcode
Supporting Filesフォルダにドラッグアンドドロップします。[ ターゲットに追加]セクションでアプリをマークすることを忘れないでください。この瞬間から、このフォントを使用しIB
て、フォントパレットから選択できます。
2)このフォントをデバイスで使用できるようにするには、を開いてキーinfo.plist
を追加しFonts provided by application
ます。アイテム0キーが含まれます。値としてフォント名を追加する必要があります。フォント名は、フォントファイル名とは異なる場合があります。しかし、最初に、ほとんどの場合、この作業ではファイル名を追加してみてください。
そうでない場合、この記事は常に私を助けました。
フォント名を見つけるのに役立つ、この記事のコードのスニペットを次に示します。
func allFonts(){
for family in UIFont.familyNames(){
println(family)
for name in UIFont.fontNamesForFamilyName(family.description)
{
println(" \(name)")
}
}
}
ターゲットのビルドフェーズ、コピーバンドルリソースにフォントファイルを追加する必要があることを述べておきます。これがないと、デバイスにフォントが表示されません。そして、それは予期しない動作につながる可能性があります。
たとえば、カスタムフォントがあるbug
ときにに遭遇しましたUITextField
が、このフォントはバンドルリソースのコピーにありませんでした。そして、私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を使用してください)を見つける必要がありますが、機能します。
また、フォントが合法的に埋め込み可能であることを確認する必要があります。ほとんどがそうではなく、この種のことを専門とする弁護士がいるので、注意してください。
CGContextShowTextAtPoint()
UTF-8では動作しませんが、使用することもできます。
はい、カスタムフォントを含めることができます。UIFont、特にfontWithName:size:
メソッドに関するドキュメントを参照してください。
1)リソースフォルダーにフォントが含まれていることを確認します。
2)フォントの「名前」は必ずしもファイル名ではありません。
3)そのフォントを使用する法的権利があることを確認してください。それをアプリに含めることで、あなたはそれを配布することにもなり、あなたはそれを行う権利を持つ必要があります。
使用している場合はxcode 4.3
、あなたが追加する必要がありますfont
にBuild Phase
下Copy Bundle Resources
によると、https://stackoverflow.com/users/1292829/arneスレッドでカスタムフォントのXcode 4.3。これは私にとってはうまくいきました、カスタムフォントが私のアプリで機能するために私が取った手順は次のとおりです:
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
。手順は次のとおりです。追加のライブラリや特別なコーディングは必要ありません。
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];
。
アプリケーションがサポートするすべてのフォントを返します。
:私はここに私のお気に入りの短いチュートリアルの1次推薦http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/この情報が来ているからです。
ステップ1-.ttfまたは.otfをFinderからプロジェクトにドラッグします
注-メインアプリケーションのターゲットで[ターゲットに追加]のボックスをクリックしてください
クリックしてターゲットに追加するのを忘れた場合は、プロジェクト階層のフォントファイルをクリックし、右側のパネルの[ ターゲットメンバーシップ]セクションでメインアプリターゲットをクリックします。
フォントがアプリターゲットの一部であることを確認するには、ビルドフェーズのコピーバンドルリソースにフォントが表示されることを確認してください
ステップ2-フォントファイル名をPlistに追加する
Infoセクションのカスタム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];
まだリリースされていませんが、cocos2d(2dゲームフレームワーク)の次のバージョンは、可変長のビットマップフォントを文字マップとしてサポートする予定です。
http://code.google.com/p/cocos2d-iphone/issues/detail?id=317
著者には、このバージョンの正式なリリース日はありませんが、来月か2月になることを示す投稿がありました。
重要なお知らせ:フルネームやファミリ名ではなく、フォントに関連付けられた「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
できた!! それでもフォントが機能しない場合は、まずフォントの互換性を確認してください
info.plist
ですか?
たぶん作者はフォントにMac FOND名を付けるのを忘れたのではないでしょうか?
また、エクスポートダイアログの「アップル」オプションを試すこともできます。
免責事項:私はiPhone開発者ではありません!
私はiOS 3.1.2のこのページでさまざまな提案を試してきましたが、これらは私の結論です:
[UIFont fontWithName:size:]
FontForgeを使用してFOND名が設定されている場合でも、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では、フォントを宣言する必要があります。「アプリケーションによって提供されたフォント」レコードを追加し、フォントの名前(DINEngschriftStd.otf)を含むアイテム0文字列を追加するだけです。
iOS 3.2以降の場合:上記のいくつかの方法を使用します。
[UIFont fontWithName:@"Real Font Name" size:16]
アプリケーションで使用します。しかし 「実際のフォント名は」いつもあなたがFontbookで見るものではありません。最善の方法は、デバイスに表示されるフォントと正確な名前をデバイスに尋ねることです。
:私は、に掲載uifont名・グラバーを使用 uifont名、グラバー
必要なフォントをxcodeプロジェクトにドロップし、ファイル名をそのplistに追加して、ビルド対象のデバイスで実行すると、UIFont fontWithName:
期待される名前を使用して完全なフォントリストがメールで送信されます。
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);
kCTFontManagerErrorAlreadyRegistered
「ファイルは指定されたスコープに既に登録されています」です。developer.apple.com/library/ios/#documentation/Carbon/Reference/...
必要なフォントをプロジェクトに追加し(画像を追加するのと同じように、Xcodeにドラッグするだけです)、それらがプロジェクト
をターゲットにしていることを確認して、このメソッドを追加し、カスタムフォントをロードします(で推奨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: "")
}
}
使用例:
if let fontPath = NSBundle.mainBundle().pathForResource("My-Font", ofType: "ttf"){
loadFont(fontPath)
}
フォントを使用:
UIFont(name: "My-Font", size: 16.5)
上記の答えのいくつかは正しいですが、フォントに関してまだ問題がある人のために詳細なビジュアルチュートリアルを書きました。
フォントをplistに追加して使用するように指示する上記の解決策
[self.labelOutlet setFont:[UIFont fontWithName:@"Sathu" size:10]];
正しいものです。他のハッキングな方法を使ってください。フォント名の検索と追加でまだ問題が発生している場合は、ここにチュートリアルがあります-
はい、アプリケーションでカスタムフォントを使用できます
そこに一歩一歩:
カスタムフォントファイルをプロジェクトのサポートファイルに追加する
UIAppFontsというInfo.plistファイルにキーを追加します。
このキーを配列にする
お持ちのフォントごとに、フォントファイルの完全な名前(拡張子を含む)を項目としてUIAppFonts配列に入力します
Info.plistを保存するアプリケーションで、[UIFont fontWithName:@ "your Custom font Name" size:20]を呼び出すだけで、UILabelsで使用するカスタムフォントを取得できます。これを適用した後、正しいフォントが得られない場合は、ダブルクリックします。カスタムフォント上で、上部のフォント名が表示されていることを注意深く確認し、このフォントをコピーして、ここに貼り付けます[UIFont fontWithName:@ "ここにカスタムフォント名を入れます"サイズ:20]
私はあなたが正しい答えを得ると思います
はい、アプリケーションでカスタムフォントを使用できます
そこに一歩一歩:
Info.plist
UIAppFontsという名前のキーをファイルに追加します。Info.plist
アプリケーションで今すぐ保存[UIFont fontWithName:@"your Custom font Name" size:20]
すると、カスタムフォントを取得するために呼び出すことができます。UILabels
これを適用した後、正しいフォントが得られない場合は、カスタムフォントをダブルクリックし、上部のフォント名が表示されることを注意深く確認し、このフォントをコピーして貼り付けます。ここで、[UIFont fontWithName:@" here past your Custom font Name" size:20]
正しい答えが得られることを願っています