786

テキストをレンダリングするためのカスタム フォントをアプリに含めてロードしUIKitUILabel. これは可能ですか?

4

32 に答える 32

647

iOS3.2以降はこれをサポートしています。iPhone OS3.2の新機能に関するドキュメントから直接:

カスタムフォントのサポートカスタムフォント
を使用するアプリケーションは、アプリケーションバンドルにそれらのフォントを含め、Info.plistファイルにUIAppFontsキーを含めることで、それらのフォントをシステムに登録できるようになりました。このキーの値は、アプリケーションのバンドル内のフォントファイルを識別する文字列の配列です。システムがキーを認識すると、指定されたフォントが読み込まれ、アプリケーションで使用できるようになります。

でフォントを設定するとInfo.plist、カスタムフォントをIBまたはプログラムで他のフォントと同じように使用できます。

Apple Developer Forumsには進行中のスレッドがあります:
https ://devforums.apple.com/thread/37824 (ログインが必要です)

そして、これを達成する方法についての優れたシンプルな3ステップのチュートリアルがあります(壊れたリンクは削除されました)

  1. Xcodeをリソースとして使用して、カスタムフォントファイルをプロジェクトに追加します
  2. Info.plistという名前のキーをファイルに追加しますUIAppFonts
  3. このキーを配列にします
  4. 使用しているフォントごとに、フォントファイルのフルネーム(拡張子を含む)をUIAppFonts配列の項目として入力します
  5. 保存するInfo.plist
  6. これで、アプリケーションで呼び出すだけで、 UILabelsUITextViews[UIFont fontWithName:@"CustomFontName" size:12]などで使用するカスタムフォントを取得できます…</ li>

また、フォントがコピーバンドルリソースに含まれていることを確認してください。

于 2010-04-11T05:01:05.527 に答える
300

編集: iOS 3.2 以降、この機能は組み込まれています。3.2 より前のバージョンをサポートする必要がある場合でも、このソリューションを使用できます。

UILabel.ttf ファイルのロードを拡張して処理する単純なモジュールを作成しました。私はそれを Apache ライセンスの下でオープンソースとしてリリースし、github Here に置きました。

重要なファイルはFontLabel.hFontLabel.m.

Genericrich's answerのコードの一部を使用しています。

ここでソースを参照してください。

また

  • フォント ファイルをリソースにコピーする

  • Info.plistUIAppFonts というファイルにキーを追加します。(「アプリ提供フォント」)

  • このキーを配列にする

  • 持っているフォントごとに、フォント ファイルの完全な名前 (拡張子を含む) を項目として UIAppFonts 配列に入力します。

  • 保存Info.plist

  • これで、アプリケーションで を呼び出すだけで、やなど[UIFont fontWithName:@"CustomFontName" size:15]で使用するカスタム フォントを取得できます…</p>UILabelsUITextViews

詳細については

于 2009-04-30T21:57:27.177 に答える
117

iOS 4でカスタム フォントを使用する簡単な方法があります。

  1. フォント ファイル (たとえば、Chalkduster.ttf) をXCode のプロジェクトのResourcesフォルダーに追加します。
  2. info.plistという新しいキーを開いて追加しますUIAppFonts。このキーの型は配列でなければなりません。
  3. 拡張子 ( Chalkduster.ttf) を含むカスタム フォント名をこの配列に追加します。
  4. これで、アプリケーションで使用でき[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
于 2010-07-07T21:05:57.717 に答える
51

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]];
于 2012-10-17T13:29:50.893 に答える
34

iOS 8+ と+ を使えばXcode 6簡単に作れます。手順は次のとおりです。

Xcode1) フォントを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 PhasesCopy Bundle Resourcesにフォント ファイルを追加する必要があることに注意してください。これがないと、デバイスにフォントが表示されません。また、予期しない動作につながる可能性があります。

たとえば、カスタム フォントがあるbugときにUITextFieldが表示されますが、このフォントはCopy Bundle Resourcesにありませんでした。そして、viewcontrollerこれで にセグエすると、関数が呼び出されるtextfieldまでに約 4 秒の遅延があります。viewDidLoadフォントの問題を解決することで、この遅延は解消されました。そのため、2 回確認することをお勧めします。(rdar://20028250) ところで、バグを再現することはできませんでしたが、フォントに問題があったことは確かです。

于 2014-09-02T08:08:45.983 に答える
27

私はこれを次のようにしました:

フォントをロードします。

- (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 を使用しているのを参照) を見つけるために、テキストをループしてマジック ナンバーを操作する必要がありますが、うまくいきます。

また、フォントが合法的に埋め込み可能であることを確認する必要があります。ほとんどはそうではなく、この種のことを専門とする弁護士もいますので、注意してください.

于 2008-12-16T01:28:57.433 に答える
20

はい、カスタム フォントを含めることができます。UIFont のドキュメント、具体的にはfontWithName:size:メソッドを参照してください。

1) リソース フォルダーにフォントが含まれていることを確認します。

2) フォントの「名前」は必ずしもファイル名ではありません。

3) そのフォントを使用する法的権利があることを確認してください。それをアプリに含めることで、それを配布することにもなり、それを行う権利が必要になります。

于 2008-12-12T01:18:13.070 に答える
20

を使用している場合は、スレッドCustom Fonts Xcode 4.3のhttps://stackoverflow.com/users/1292829/arneに従って、を下xcode 4.3に追加する必要があります。これは私にとってはうまくいきました。アプリでカスタムフォントを機能させるために行った手順は次のとおりです。fontBuild PhaseCopy Bundle Resources

  1. プロジェクトにフォントを追加します。OTF(または) ファイルを作成した新しいグループにドラッグ アンド ドロップし、TTFxcode の選択を受け入れましたcopying the files over to the project folder
  2. UIAppFonts配列内のアイテムとしてリストされているフォントを使用して配列を作成します。拡張子namesではなく、 のみ (例: " GothamBold"、" GothamBold-Italic")。
  3. 画面左側project nameの上部にあるウェイをクリックします。Project Navigator
  4. Build Phasesxcode のメイン領域に表示されるタブをクリックします。
  5. Copy Bundle Resources」セクションを展開し、 をクリックし"+"てフォントを追加します。
  6. をクリックすると開くファイルナビゲーターからフォントファイルを選択します"+"
  7. 必要なすべてのフォントに対してこれを行いますadd to the project
于 2012-03-27T19:45:33.570 に答える
14

ここで私のお気に入りの短いチュートリアルの 1 つに従うことをお勧めします

ステップ 1 - .ttf または .otf を Finder からプロジェクトにドラッグします

注 - メイン アプリケーション ターゲットの [ターゲットに追加] ボックスをクリックしてください。

フォント ファイルをプロジェクトにドラッグし、クリックしてターゲットに追加します

クリックしてターゲットに追加するのを忘れた場合は、プロジェクト階層のフォント ファイルをクリックし、右側のパネルで [ターゲット メンバーシップ]セクションのメイン アプリ ターゲットをクリックします。

忘れた場合にアプリのターゲットにフォントを追加する方法

フォントがアプリ ターゲットの一部であることを確認するには、ビルド フェーズのコピー バンドル リソースにフォントが表示されるようにします。

リソースをチェックして、フォントがアプリ ターゲットの一部であるかどうかを確認する方法

ステップ 2 - フォント ファイル名を Plist に追加する

情報セクションのカスタム iOS ターゲット プロパティに移動し、そのセクション内の項目にキーを追加します(入力時にオプションとして表示され、配列として設定されます。小さな矢印をクリックします配列項目を開き、追加した .ttf または .otf ファイルの名前を入力して、これらが使用したいフォント ファイルであることをアプリに知らせます。Fonts provided by application

注 - この手順の直後にアプリがクラッシュする場合は、ここに追加した項目のスペルを確認してください

カスタム フォントが追加された plist の例

ステップ 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];
于 2015-09-29T16:53:57.063 に答える
12

これがその方法のステップバイステップの説明です。追加のライブラリや特別なコーディングは必要ありません。

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

ほとんどの場合、問題はメソッドではなくフォントにあります。そのための最良の方法は、verdanaやgeogiaなど、確実に機能するフォントを使用することです。次に、目的のフォントに変更します。それが機能しない場合は、フォント名が正しくないか、フォントが適切にフォーマットされていない可能性があります。

于 2011-03-22T05:59:09.057 に答える
12

既存の iOS アプリに新しいフォントを追加するのは非常に簡単です。

リソース フォルダに font.ttf などのフォントを追加するだけです。

アプリケーションを開きますinfo.plist。「アプリケーションによって提供されるフォント」として新しい行を追加し、フォント名を font.ttf として入力します。

そして、フォントを設定するときは次のようにしますsetFont:"corresponding Font Name"

フォントが追加されているかどうかは、 で確認できますNSArray *check = [UIFont familyNames];

アプリケーションがサポートするすべてのフォントを返します。

于 2012-03-30T10:12:55.133 に答える
10

ファインダーでTTFを見つけて、「情報を見る」。「氏名:」という見出しの下に名前が表示され、それを使用しましたfontWithName(正確な名前をコピーして貼り付けただけです。この場合、「.ttf」拡張子は必要ありません)。

于 2010-12-07T01:16:18.193 に答える
8

まだリリースされていませんが、cocos2d (2D ゲーム フレームワーク) の次のバージョンでは、文字マップとして可変長ビットマップ フォントがサポートされる予定です。

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

著者は、このバージョンの正確なリリース日を持っていませんが、次の 1 ~ 2 か月でリリースされることを示す投稿を見ました。

于 2009-04-27T22:56:36.797 に答える
8

1 つの重要な注意: フォントのフル ネームやファミリー ネームではなく、フォントに関連付けられた "PostScript 名" を使用する必要があります。この名前は、多くの場合、フォントの通常の名前とは異なる場合があります。

于 2011-01-15T16:40:06.250 に答える
7

この手順に従ってください

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

終わり!!それでもフォントが機能しない場合は、最初にフォントの互換性を確認してください

于 2013-03-09T04:34:15.520 に答える
6

作者がフォントにMac FOND という名前を付けるのを忘れたのではないでしょうか?

  1. FontForgeでフォントを開き、[要素] > [フォント情報] に移動します。
  2. FOND 名を設定できる「Mac」オプションがあります。
  3. [File] > [Export Font] の下で、新しい ttf を作成できます

エクスポート ダイアログの「Apple」オプションを試してみることもできます。

免責事項: 私は iPhone の開発者ではありません。

于 2009-05-01T01:04:44.387 に答える
6

iOS 3.1.2 でこのページのさまざまな提案を試してみましたが、これらが私の結論です。

FontForge を使用して FOND 名が設定されていても、単に[UIFont fontWithName:size:]Resources ディレクトリ内のフォントを使用するだけでは機能しません。

[UIFont fontWithName:size:]GSFontAddFromFile を使用してフォントが最初に読み込まれる場合に機能します。ただしGSFontAddFromFile、iOS 3.1.2 の一部ではないため、@rpetrich の説明に従って動的にロードする必要があります。

于 2009-10-28T14:22:02.927 に答える
5

見上げるATSApplicationFontsPath

フォントファイルをアプリリソースフォルダーに含めることができる単純なplistエントリであり、それらはアプリで「正常に機能」します。

于 2009-04-09T11:59:46.893 に答える
5

このページのアドバイスのいくつかを、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 を押してください。

次に、カスタム フォントをお楽しみください。

于 2012-09-03T16:13:27.170 に答える
5

最初にフォントを .odt 形式でリソースに追加します。この場合は DINEngschriftStd.otf を使用し、次にこのコードを使用してフォントをラベルに割り当てます。

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

フォントがプロジェクトにロードされていることを確認するには、単に呼び出します

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

.plist では、フォントを宣言する必要があります。「アプリケーションによって提供されるフォント」レコードを追加し、フォントの名前を含む項目 0 文字列を追加するだけです (DINEngschriftStd.otf)

于 2012-09-26T09:58:53.227 に答える
5

より良い解決策は、新しいプロパティ " Fonts provided by application" をinfo.plistファイルに追加することです。

その後、通常のようにカスタム フォントを使用できますUIFont

于 2011-03-16T09:24:23.027 に答える
3

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);
于 2013-03-19T23:39:34.097 に答える
1

上記の回答のいくつかは正しいものですが、フォントにまだ問題がある人のために、詳細なビジュアル チュートリアルを作成しました。

フォントをplistに追加して使用するように指示する上記のソリューション

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

は正しいものです。他のハックな方法を使用してください。フォント名の検索と追加でまだ問題が発生している場合は、チュートリアルをご覧ください -

iOS アプリケーションでカスタム フォントを使用する

于 2013-05-10T21:29:10.473 に答える
1

すべてを可能にしましたが、新しいフォントが表示されないため、解決策を見つけました:

fot ファイル (otf または ttf) をドラッグするときは、[ターゲットに追加] の下のチェックボックスをオンにすることを忘れないでください。

これを行うと、フォントが表示され、すべてが正常に機能します。

于 2013-01-28T15:34:35.410 に答える
1

はい、アプリケーションでカスタム フォントを使用できます

段階的にそこに従ってください:

カスタム フォント ファイルをプロジェクトのサポート ファイルに追加します。

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]

あなたが正しい答えを得ることを願っています

于 2014-03-26T07:00:11.707 に答える