web-dev-qa-db-ja.com

IPhoneアプリケーションにカスタムフォントを埋め込むことはできますか?

この質問はiOS 3.2以前のものに関するものです。 3.2の時点で、この機能は下記のsamvermetteの答えを使って簡単に達成できます、そして私はこれを反映するためにAccepted Answer(commandからsamvermetteへ)を変更しました。私は両方の答えに賛成を与えることはできません(投票を除く)が、それらは両方とも良いです。

私は、テキストをレンダリングするためのカスタムフォントをアプリに含めてロードしてから、それをUIKitのような標準のUILabel要素と共に使用したいと思います。これは可能ですか?

私はリンクの下に見つかりました:

しかし、これらは私に各グリフを自分でレンダリングすることを要求します。これは、特に複数行テキストの場合には、少々大変な作業に似ています。

私はそれが可能ではないと正直に言う投稿を見つけました、しかし正当化なしで、そう私は決定的な答えを探しています。


_ edit _ - -[UIFont fontWithName:size:]実験に失敗しました

Harrowprint.tff( here からダウンロード)をダウンロードし、それを私のResourcesディレクトリとプロジェクトに追加しました。それから私はこのコードを試してみました:

UIFont* font = [UIFont fontWithName:@"Harrowprint" size:20];

その結果、例外がスローされました。 FinderでTTFファイルを見ると、フォント名がHarrowprintであることが確認されました。


_ edit _ - これまでに、XまたはYに関するドキュメントを読むように指示する回答がいくつもありました。これらのすべてを幅広く試してみたところ、どこにも見つかりませんでした。あるケースでは、XはiPhoneではなくOS Xにのみ関連することが判明しました。そのため、私はこの質問に賞金を設定しています。この賞金は、デバイス上でこれを機能させるのに十分な情報で応答する(文書化されたAPIのみを使用して)回答を提供する最初の人に授与します。シミュレータで作業することもボーナスになります。


_ edit _ - バウンティが最高の投票数を持つ回答に自動付与するようです。面白い。質問を解決した答えを実際に提供する人は誰もいませんでした - あなた自身のUILabelサブクラスをコーディングするソリューションはWord-wrapをサポートしていません。これは私にとって必須の機能です。

765
Airsource Ltd

iOS 3.2以降はこれをサポートしています。から直接 iPhone OS 3.2の新機能 doc:

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

フォントがInfo.plistに設定されたら、カスタムフォントをIBの他のフォントとして使用することも、プログラムで使用することもできます。

アップルデベロッパフォーラムには継続的なスレッドがあります。
https://devforums.Apple.com/thread/37824 (ログインが必要)

そして、これを達成するための優れた簡単な3ステップのチュートリアルです(リンク切れは削除されました)

  1. Xcodeをリソースとして使用して、カスタムフォントファイルをプロジェクトに追加します。
  2. Info.plistファイルにUIAppFontsという名前のキーを追加します。
  3. このキーを配列にする
  4. お持ちのフォントごとに、フォントファイルのフルネーム(拡張子を含む)をUIAppFonts配列の項目として入力します。
  5. Info.plistを保存
  6. 今すぐあなたのアプリケーションであなたはあなたの UILabels UITextViews などで使うカスタムフォントを得るために単に[UIFont fontWithName:@"CustomFontName" size:12]を呼ぶことができます…

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

636
samvermette

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

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

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

それは Genericrich's answer からのコードのいくつかを使います。

ソースをブラウズ ここ。

OR

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

  • UIAppFontsというキーをInfo.plistファイルに追加します。 ( "アプリケーションによって提供されるフォント)

  • このキーを配列にする

  • お持ちのフォントごとに、フォントファイルのフルネーム(拡張子を含む)をUIAppFonts配列の項目として入力してください。

  • Info.plistを保存

  • 今すぐあなたのアプリケーションであなたはあなたのUILabelsUITextViewsなどで使うカスタムフォントを得るために単に[UIFont fontWithName:@"CustomFontName" size:15]を呼ぶことができます…

詳細については

297
commanda

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

  1. XCodeでプロジェクトのリソースフォルダにフォントファイル(たとえば、Chalkduster.ttf)を追加します。
  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
115
alexey

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]];
51
bdev

編集:この答えはiOS 3.2以降では使われていません。 UIAppFontsを使う

私がカスタムUIFontsを正常にロードすることができた唯一の方法は、専用の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;
}

フォントがロードされると、アップル提供のフォントと同じように使用できます。

NSLog(@"Available Font Families: %@", [UIFont familyNames]);
[label setFont:[UIFont fontWithName:@"Consolas" size:20.0f]];

将来APIが消えた場合に備えて、GraphicsServicesを実行時にロードすることもできます。

#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;
}
36
rpetrich

iOS 8 +とXcode 6 +を使えば、これを簡単に行うことができます。手順は次のとおりです。

1)フォントをXcode Supporting Filesフォルダにドラッグアンドドロップします。アプリを ターゲットに追加 セクションにマークすることを忘れないでください。この瞬間からあなたはIBでこのフォントを使用してフォントパレットからそれを選択することができます。

enter image description here

2)このフォントをあなたのデバイスで使えるようにするには、あなたのinfo.plistを開いてFonts provided by applicationキーを追加してください。それはItem 0キーを含みます、あなたは値としてあなたのフォント名を追加しなければなりません。フォント名はフォントファイルの名前とは異なる場合があります。しかし、最初に、ほとんどの場合この作品であなたのファイル名を追加しようとします。

enter image description here

そうでなければ、 この記事 はいつも助けてくれました。

これは、フォント名を見つけるのに役立つ、この記事のコードの一部です。

func allFonts(){

   for family in UIFont.familyNames(){

       println(family)


       for name in UIFont.fontNamesForFamilyName(family.description)
       {
           println("  \(name)")
       }

   }

}

編集

ターゲットのビルドフェーズ バンドルリソースのコピー にフォントファイルを追加する必要があります。それがなければ、あなたはデバイス上であなたのフォントを見ることはありません。そしてそれは予期しない行動を引き起こす可能性があります。

例えば、私はbugがカスタムフォントを持っているのにUITextFieldに遭遇しましたが、このフォントは コピーバンドルリソース にはありませんでした。そして私がこのviewcontrollertextfieldを探すとき、viewDidLoad関数が呼ばれるまでに約4秒の遅れがあります。フォントの問題を解決することで、この遅れは解消されました。そのため、2回確認することをお勧めします。 (rdar:// 20028250)ところで、私はバグを再現することができませんでした、しかし問題はフォントにあったと確信しています。

34
Dima Deplov

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

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

- (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を使用してください)を見つけるには、テキスト全体をループしてマジックナンバーを使用していく必要がありますが、うまくいきます。

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

27
Genericrich

xcode 4.3を使用している場合は、 https://stackoverflow.com/users/1292829/arne に従って、Build Phaseの下のCopy Bundle Resourcesfontを追加する必要があります。 カスタムフォントXcode 4.3 。これは私にとってはうまくいきました。ここで私のアプリでカスタムフォントが使えるようにするための手順を示します。

  1. プロジェクトにフォントを追加します。私はOTF(またはTTF)ファイルを作成した新しいグループにドラッグアンドドロップし、xcodeのcopying the files over to the project folderの選択を受け入れました。
  2. 配列内の項目としてリストされているフォントでUIAppFonts配列を作成します。拡張子ではなくnamesだけです(例: "GothamBold"、 "GothamBold-Italic")。
  3. 画面左側のproject nameの上にあるProject Navigatorのところをクリックしてください。
  4. Xcodeのメインエリアに表示されるBuild Phasesタブをクリックしてください。
  5. Copy Bundle Resources」セクションを展開し、"+"をクリックしてフォントを追加します。
  6. "+"をクリックすると開くポップアップのファイルナビゲータからフォントファイルを選択します。
  7. あなたがadd to the projectする必要があるすべてのフォントに対してこれを行います。
20
SKris

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

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

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

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

20
August

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

あなただけのフォントを追加する必要があります。あなたのリソースフォルダにfont.ttf。

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

そしてフォントを設定するときはsetFont:"corresponding Font Name"のようにしてください

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

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

12
Subrat

これを行う方法を順を追って説明します。追加のライブラリや特別なコーディングは不要です。

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

ほとんどの場合、問題はフォントではなくメソッドにあります。そのための最善の方法は、verdanaやgeogiaのように確実に機能するフォントを使用することです。その後、目的のフォントに変更します。うまくいかない場合は、フォント名が正しくないか、フォントが整形式フォントではない可能性があります。

12
5566

私はここで私のお気に入りの短いチュートリアルのうちの1つに従うことをお勧めします: http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/ そこからこの情報は来る。

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

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

Drag font files into your project and click to add them to your target

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

how to add fonts to app target if you forgot

あなたのフォントがあなたのアプリターゲットの一部であることを確認するために、それらがあなたのCopy Bundle Resources in Build Phasesに現れることを確かめてください

how to check resources to see if fonts are part of app target

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

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

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

example plist with custom fonts added

ステップ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);
    }
}

あなたのログは次のようになります。

Example of searching log to find font names

ステップ4 - ステップ3からの名前を使って新しいカスタムフォントを使う

スイフト

 label.font = UIFont(name: "SourceSansPro-Regular", size: 18)

目的C

 label.font = [UIFont fontWithName:@"SourceSansPro-Regular" size:18];
11
ColossalChris

Finderで「TTF」を見つけて「情報を見る」。 「フルネーム」という見出しの下に、fontWithNameで使用した名前が付けられました(正確な名前をコピーして貼り付けただけです。この場合は '.ttf'拡張子は必要ありません)。

10
Nano

1つの重要な注意:あなたはそのフルネームや姓ではなく、フォントに関連した "PostScript名"を使うべきです。この名前は通常のフォントの通常の名前とは異なる場合があります。

8
user576862

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

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

作者はこのバージョンのリリース予定日を明確にしていません、しかし、私はそれが来月か2か月以内であることを示す投稿を見ました。

8
John

たぶん作者がフォントに Mac FOND名 /を付けるのを忘れたのでしょうか。

  1. FontForge でフォントを開き、それからElement> Font Infoの順に進みます。
  2. あなたがFOND名を設定することができる「Mac」オプションがあります。
  3. ファイル>フォントのエクスポートで、新しいttfを作成できます。

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

_免責事項_ :私はiPhoneの開発者ではない!

6
ByteNirvana

このステップに従ってください

1)プロジェクトにあなたのフォントをコピーする

2).plistファイルをソースコードモードで開きます...(注 - info.plistは開かないでください)

3)その前に - あなたのフォントを右クリックしてそれをfontforgeか同様のエディタで開き、あなたのシステムでそれをinstallname__にしてください、それはinstallname__であるべきです

4)これを入力

 <key>UIAppFonts</key>
<array>
    <string>MyriadPro.otf</string>
</array>

5)class .mにこのコードを入力してください

 [lblPoints setFont:[UIFont fontWithName:@"Myriad Pro" size:15.0]];

ここでlblPointsはあなたのUILabelname__の時点で変更されます

完了しました。それでもフォントが機能しない場合は、まずフォントの互換性を確認してください。

6
Kirtikumar A.

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

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

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

6

私はこのページのアドバイスのいくつかを、iOS 5で私に役立つものにまとめました。

まず、プロジェクトにカスタムフォントを追加する必要があります。それから、@ iphoneDevのアドバイスに従い、あなたのinfo.plistファイルにそのフォントを追加する必要があります。

それをした後、これは動作します:

UIFont *yourCustomFont = [UIFont fontWithName:@"YOUR-CUSTOM-FONT-POSTSCRIPT-NAME" size:14.0];
[yourUILabel setFont:yourCustomFont];

しかし、あなたはあなたのフォントのポストスクリプト名を知る必要があります。 FontBookにいる間に@ Daniel Woodのアドバイスに従い、command-iを押してください。

それから、あなたのカスタムフォントを楽しんでください。

5
AaronBaker

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

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

あなたのフォントがプロジェクトにロードされていることを確認するためにただ電話してください

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

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

5

IOS 3.2以降の場合:上記のいくつかのメソッドを使用してください。

  1. XCodeのプロジェクトのResourcesフォルダにフォントファイル(たとえば、 Chalkduster.ttf )を追加します。
  2. Info.plistを開き、UIAppFontsという新しいキーを追加します。このキーの型は配列であるべきです。
  3. 拡張子( " Chalkduster.ttf ")を含めて、この配列にカスタムフォント名を追加します。
  4. アプリケーションで[UIFont fontWithName:@"Real Font Name" size:16]を使用してください。

_ but _ 「実際のフォント名」は、常にFontbookに表示されるものではありません。最善の方法は、どのフォントを使用しているのか、また正確な名前は何を使用しているのかをデバイスに問い合わせることです。

私はuifont-name-grabberを使っています: uifont-name-grabber

必要なフォントをxcodeプロジェクトにドロップし、そのファイル名をそのplistに追加して、それを構築しているデバイス上で実行すると、UIFont fontWithName:が期待する名前を使用して完全なフォントリストを電子メールで送信します。

5
Jarson

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

そうすれば、通常のUIFontのようにカスタムフォントを使うことができます。

5
RichX

ATSApplicationFontsPathを調べる

あなたのアプリリソースフォルダーにフォントファイルを含めることを可能にし、それらはあなたのアプリで "ただ動く"ことを可能にする単純なplistエントリ。

5
Matt Sephton

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);
3
David M.

Swift、コード化方法:(Swift 2.0でも動作します)

必要なフォントをプロジェクトに追加し(画像を追加するのと同じように、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)
3
Daniel Krom

リソースフォルダ内に必要な "FONT"ファイルを追加できます。次にProject Info.plistファイルに行き、「アプリケーションによって提供されるフォント」というキーと「フォント名」として値を使用します。

その後、メソッド[UIFont fontwithName:@"FONT NAME" size:12];を呼び出すことができます

2
Nishan29

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

そこに続くステップバイステップ:

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

UIAppFontsという名前のInfo.plistファイルにキーを追加します。

このキーを配列にする

お持ちのフォントごとに、フォントファイルのフルネーム(拡張子を含む)をUIAppFonts配列の項目として入力してください。

Info.plistを保存するアプリケーションで、正しいフォントが得られない場合は、これを適用した後、[UIFont fontWithName:@ "your custom font name" size:20]を呼び出して、カスタムフォントをUILabelsで使用できますカスタムフォントに、そして慎重にトップサイドのフォント名が来ているのを見て、このフォントをコピーして、ここに貼り付けてください[UIFont fontWithName:@ "ここからあなたのカスタムフォント名を過ぎた"サイズ:20]

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

1
Akhil Bhadauria

上記の答えのいくつかは正しいですが、私はまだフォントに関する問題を抱えている人々のための詳細なビジュアルチュートリアルを書きました。

上記の解決策は、フォントをplistに追加して使用するように指示します。

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

正しいものです。他のハックな方法を使ってください。あなたがまだフォント名を見つけてそれらを追加することに関して問題に直面しているならば、これはチュートリアルです -

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

1
Bharat Gulati

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

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

そうすることであなたのフォントが表示され、すべてうまくいくでしょう。

1
ElizaS

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

そこに続くステップバイステップ:

  • サポートファイルでプロジェクトにカスタムフォントファイルを追加する
  • UIAppFontsという名前のキーをInfo.plistファイルに追加します。
  • このキーを配列にする
  • お持ちのフォントごとに、フォントファイルのフルネーム(拡張子を含む)をUIAppFonts配列の項目として入力してください。
  • Info.plistを保存する今度はあなたのアプリケーションであなたはあなたのUILabelsで使うカスタムフォントを得るために単に[UIFont fontWithName:@"your Custom font Name" size:20]を呼ぶことができます

これを適用した後、正しいフォントが得られない場合は、カスタムフォントをダブルクリックし、上面のフォント名が慎重に入力されていることを確認してコピーし、ここに貼り付けます。[UIFont fontWithName:@" here past your Custom font Name" size:20]

1
user2691469

拡張機能として@ bdev's answer は、カスタムフォントのみをリストアップするための更新版です。

ステップ1:@ bdevの答えを使ってすべてのシステムフォントを見つけてファイルに保存します。

次のコードを最初のView Controllerの-(void)viewDidLoad[super viewDidLoad]の後(またはApp Delegate内)に配置します。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                     NSUserDomainMask, YES);
NSMutableArray *system_fonts = [NSMutableArray array];
for (NSString *familyName in [UIFont familyNames]) {
    for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
        [system_fonts addObject:fontName];
    }
}
if([paths count] > 0) {
    [system_fonts writeToFile:[[paths objectAtIndex:0]
                               stringByAppendingPathComponent:@"array.out"] atomically:YES];
}

アプリを一度実行します。その後やめてください。

ステップ2:プロジェクトにカスタムフォントを追加する

受け入れられた答えで示された方法を使用して、あなたのカスタムフォントを追加してください(.plistを更新することと、Add To Targetをチェックすることによって構築するためにフォントファイルを追加することを忘れないでください)。

ステップ3:システムフォントと現在のフォントリストを比較する

手順1のコードを次のように置き換えます。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                     NSUserDomainMask, YES);
NSMutableArray *system_fonts = [NSMutableArray arrayWithContentsOfFile:[[paths objectAtIndex:0]
                                                                        stringByAppendingPathComponent:@"array.out"]];

for (NSString *familyName in [UIFont familyNames]) {
    for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
        if (![system_fonts containsObject:fontName]) {
            NSLog(@"%@", fontName);
        }
    }
}

アプリを実行すると、追加したカスタムフォントのリストが表示されます。

これはiOS 3.2からiOS 6までに適用されます(将来のリリースではおそらくうまくいくでしょう)。 .ttc.ttfでも動作します。

0
Raptor

前のすべての答えが示したように、それは非常に可能性があり、新しいiOSバージョンではかなり簡単です。

これは技術的な答えではないことを私は知っていますが、多くの人がそれを誤解しているので(したがって、訴訟を起こすと多額の費用がかかるライセンスに違反することになります)。 iOS(または他の種類の)アプリのフォントは基本的に 再配布 /フォントです。商用フォントのほとんどのライセンスは 禁止 再配布を行いますので、ライセンスに従って行動していることを確認してください。

0
DrMickeyLauer