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


772

テキストレンダリング用のカスタムフォントをアプリに含め、それを読み込んでから、などの標準UIKit要素で使用したいと思いUILabelます。これは可能ですか?


5
スタンフォード大学でCS193p(iPhoneアプリケーション開発)の講義の一つでは、エヴァンは、デバイス上で、独自のフォントをインストールすると、少なくとも手段でそれが:-)可能だ「多くの作業」、であることに注目
イリヤ・バーマン

2
iPhone 3.2ではカスタムフォントを使用できますが、iPadのみです(以下の回答を参照)
samvermette 2010

6
最後に画像を使用しました。
Airsource Ltd

2
うわー...すべての後に、答えはまだ画像です...信じられないほどです。システムフォントと同じ機能を持つカスタムフォントの確実な実装を本当に望んでいました。
ああ

1
質問してから10年が経過したことを反映するために、元の質問を大幅に削除しました。他のすべての人に、コメントと回答を適切にトリミングすることをお勧めします。
Airsource Ltd

回答:


646

iOS 3.2以降はこれをサポートしています。ストレートからiPhone OS 3.2の新機能ドキュメント:

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

でフォントを設定し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. アプリケーションで今すぐ呼び出すだけ[UIFont fontWithName:@"CustomFontName" size:12]で、UILabelsUITextViewsなどで使用するカスタムフォントを取得できます。

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


14
iOS4のステップバイステップチュートリアルは次のとおり
2010/06

15
このチュートリアルはとても良いです。shang-liang.com/blog/custom-fonts-in-ios4重要なことに、[UIFont fontWithName:...]へのNSString引数は、ファイル名ではなく、フォントのOS名です。
ウィルスター、2011年

152
iOSで必要なフォントの実際のポストスクリプト名を見つけるために、他の誰かがfontforgeを3時間インストールする前に。フォントブックのフォントでCmd + Iを押すだけでこの情報を見つけることができることを指摘しておきます。
Daniel Wood

42
正しいフォント名を取得するのに苦労した後、私はインストールされているフォントをリストアップして見つけました。非常に役立ちます。次にコードを示します。for(NSString * familyName in [UIFont familyNames]){NSLog(@ "Family%@"、familyName); NSLog(@ "名前=%@"、[UIFont fontNamesForFamilyName:familyName]); }
スティーブポッター

26
コードが機能しない場合は、フォントファイルが[ビルドフェーズ]-> [バンドルリソースのコピー]に表示されていることを確認してください
Mickey

299

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

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

重要なファイルはFontLabel.hおよびFontLabel.mです。

Genericrichの回答のコードの一部を使用しています

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

または

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

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

  • このキーを配列にする

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

  • セーブ Info.plist

  • これで、アプリケーションでを呼び出し[UIFont fontWithName:@"CustomFontName" size:15]て、UILabelsand UITextViewsなどで使用するカスタムフォントを取得できます。

詳細については


2
私はあなたのコードを使ってみましたが、フォントによってはかなり頻繁にクラッシュします。たとえば、ここからfontspace.com/category/tikiのアフリカフォントまたはTikiフォントを使用してみてください。
4thSpace

2
このライブラリはうまく機能します。しかし、垂直方向の間隔についてサポートが必要です。それを行う方法を理解できません。したがって、このメッセージがあります。numberOfLines= 3; ライン1とライン2とライン3の間の垂直間隔をどのように制御しますか?ありがとう、Tee
teepusink 2009年

2
@commandaこんにちはcommandaさん、回答で提供したリンクが使用できないようです。
Parth Bhatt 2013年

5
@ParthBhatt この機能はCocoaTouchで提供されるようになったため、FontLabelではなく、stackoverflow.com / a / 2616101/21447で提供されているソリューションを使用する必要があります。
司令官2013年

2
@ParthBhatt:リポジトリがzyngaでホストされなくなった理由はわかりませんが、github.com / kballard / fontlabelで入手できます
Lily Ballard

116

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

  1. フォントファイル(などChalkduster.ttf)をリソースに追加するXCodeでプロジェクトのフォルダーに。
  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

3
これは4.0以降だけでなく3.2でもサポートされるようです
Jesse Rusak

1
ありがとう!私が抱えている問題は、カスタムフォントが組み込みのフォントと比べて少し高い(下の余分なスペース)ように見えることです。GitHubのFontLabelリポジトリを使用してみました。
Joe D'Andrea

12
UIFontコンストラクタに渡す文字列は、ファイル名からフォントの内部名の拡張子を除いたものではないことに注意してください。短縮したファイル名のフォントをロードするときに問題が発生しました。ファイルに含まれているフォント名全体を使用すると、フォントは正常にロードされました。
スレイトン

5
スレイトンが今言ったことは重要です。[UIFont fontWithNameは:Font Bookの中でそれを開いて選択することで表示されているフォントの「フルネーム」を期待する:プレビュー- >表示フォント情報
electromaggot

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

36

編集:この回答は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;
}

不思議なことに注意してください。これは機能しますが、フォントを使用する直前にloadFontsを呼び出す必要があります。アプリケーション全体でロードされたままではないようです
ピクセル

OS 3.0では、2番目と2番目の例を必ず使用する必要があります。インポートを忘れないでください。私にはかなりうまくいきました。
M.ライアン

別のメモ-これはプライベートフレームワークであり、動的にロードされます...どちらもアプリのAppStoreへの受け入れを停止する可能性があります。
ピクセル

結論は何ですか?この方法に代わるものは何ですか?
Raj Pawan Gumdal 2010

1
SHouldは、[NSString sizeWithFont:[UIFont fontWithName:@"customFont" size:14]];私が試したカスタムフォントの幅と高さを0 を返すことにも注意してください。
ルークマクナイス、2011年

34

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

1)フォントをXcodeSupporting 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)ところで、バグを再現できませんでしたが、フォントに問題があると確信しています。


1
ただのメモ。カスタムフォントは、IBで適切に構成されていても、LaunchScreensでは使用できません。それは論理かもしれません。
Rivera

@Riveraすごい、素晴らしいメモ!それを知りませんでした。代わりの方法として、UIImageをテキストと一緒に使用することが考えられます。
ディマデプロフ2015

@Rivera、その情報をありがとう-それはどこにも文書化されていますか?私は一歩逃したと思って何度も歩き続けていました。
スポンサック

@spongessuckないでくださいあなたの質問について、いくつかのドキュメントがありdeveloper.apple.com/library/ios/documentation/StringsTextFonts/...
ディマDeplov

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を使用してください)を見つける必要がありますが、機能します。

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


1
私はそれがうまく機能していると確信していますが、UILabelとUITextViewが私のために現在行っているすべて、特にワードラップ、配置、および編集を処理するために、独自のレイアウトエンジンを記述したくありません。
Airsource Ltd

1
AFAICS、これは大文字でのみ機能するため、「uppercaseString」呼び出しです。
Martin Cote、

2
「マジックナンバー」トリックは実際には機能しない純粋なハックなので、私は反対票を投じています。実際の解決策は、TTFファイルからcmapテーブルを取得することです。
Martin Cote、

1
これは、Core Graphicsでフォントを直接使用するためのきちんとした情報です。将来の読者のために更新するために:新しいOSでは、Core Textを使用できます。あるいは、CGContextShowTextAtPoint()UTF-8では動作しませんが、使用することもできます。
IvanVučica2012

20

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

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

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

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


実際にこれを成功させましたか?私はそれを機能させることができません、そしてグーグルはそれを試みて失敗した他の人々だけを見つけます。
Airsource Ltd

はい。私が持っています。繰り返しますが、適切なフォント名を使用していることを確認してください。

1
「フォントの「名前」は必ずしもファイル名ではない」と言った場合、どのようにして正しい名前を見つけるのですか?
キース・フィッツジェラルド

7
ええ、この答えは間違っています。箱から出してこれを行うことはできません。
ジョナサンスターリング

iOS 9のアップデート、UIFontのドキュメントではカスタムフォントについて何も触れられていません
Cbas

20

使用している場合はxcode 4.3、あなたが追加する必要がありますfontBuild PhaseCopy Bundle Resourcesによると、https://stackoverflow.com/users/1292829/arneスレッドでカスタムフォントの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. Build Phasesxcodeのメイン領域に表示されるタブをクリックします。
  5. Copy Bundle Resources」セクションを展開し、をクリックし"+"てフォントを追加します。
  6. をクリックすると開くポップアップファイルナビゲーターからフォントファイルを選択します"+"
  7. あなたがしなければならないすべてのフォントに対してこれを行いますadd to the project

12

手順は次のとおりです。追加のライブラリや特別なコーディングは必要ありません。

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

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


12

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

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

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

そしてフォントを設定するときは setFont:"corresponding Font Name"

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

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


11

:私はここに私のお気に入りの短いチュートリアルの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

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

カスタムフォントが追加された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];

10

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


8

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

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

著者には、このバージョンの正式なリリース日はありませんが、来月か2月になることを示す投稿がありました。


8

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


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

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


1
なぜ開かないのinfo.plistですか?
ラプター

ポイント4のPlistに何もないのに、なぜ5ポイントでMyraidとProの間にスペースがあるのですか?
jayant rawat

@jayantrawatそのフォント名は、フォントをインストールした後にシステムに表示されます。.plistは、フォントファイルの名前です(.ttlまたはotf)
Kirtikumar A.

@KirtikumarA はい..アプリで成功しit..implementedしまった
ジャヤントをrawat

@jayantrawat私の解決策が役立つ場合、他のユーザーが同じように助けを得ることができるように、答えに賛成投票をリクエストしてください
Kirtikumar A.

6

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

  1. FontForgeでフォントを開き、要素>フォント情報に移動します
  2. フォント名を設定できる「Mac」オプションがあります。
  3. [ファイル]> [フォントのエクスポート]で、新しいttfを作成できます

また、エクスポートダイアログの「アップル」オプションを試すこともできます。

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


6

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

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

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


5

調べる ATSApplicationFontsPath

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


これをデバイスで試しましたか?私には喜びがなかったので、グーグルは、このplistエントリがiPhone OSについて文書化されているにもかかわらず、iPhoneではサポートされていないことを示唆しています。
Airsource Ltd

1
現在、OS Xアプリでのみ使用しています。
Matt Sephton、2009

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を押してください。

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


5

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

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

フォントがプロジェクトに読み込まれていることを確認するには、次を呼び出します

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

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


5

iOS 3.2以降の場合:上記のいくつかの方法を使用します。

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

しかし 「実際のフォント名は」いつもあなたがFontbookで見るものではありません。最善の方法は、デバイスに表示されるフォントと正確な名前をデバイスに尋ねることです。

:私は、に掲載uifont名・グラバーを使用 uifont名、グラバー

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


5

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

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


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);

このコードを使用しましたが、&error Failed to load font:操作を完了できませんでした。(com.apple.coretext error 105-CGFont '<CGFont(0x14fe7df0):Shruti>'を登録できませんでした)
Hiren

ドキュメントによると、エラー105はkCTFontManagerErrorAlreadyRegistered「ファイルは指定されたスコープに既に登録されています」です。developer.apple.com/library/ios/#documentation/Carbon/Reference/...
デヴィッド・M.

3

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)

不思議なことに、Info.plistにフォントを追加しないのはどうしてですか?
Stephen Jesse

2

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

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


1

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

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

その後、フォントが表示され、すべてが正常に動作します。


1

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

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

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

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

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


私はこれを試しました。機能しているようですが、設定したサイズに関係なく、フォントが小さいです。何それの価値のために、私は自由に利用できるOTFファイルを使用しています:philsfonts.com/index.php/free_fontsを
アリ金

他のカスタムフォントで試してみてください。問題が解決しない場合はお知らせください。そのように機能する場合は、フォントに問題があります。
Bharat Gulati 2013年

1

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

そこに一歩一歩:

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

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

このキーを配列にする

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

Info.plistを保存するアプリケーションで、[UIFont fontWithName:@ "your Custom font Name" size:20]を呼び出すだけで、UILabelsで使用するカスタムフォントを取得できます。これを適用した後、正しいフォントが得られない場合は、ダブルクリックします。カスタムフォント上で、上部のフォント名が表示されていることを注意深く確認し、このフォントをコピーして、ここに貼り付けます[UIFont fontWithName:@ "ここにカスタムフォント名を入れます"サイズ:20]

私はあなたが正しい答えを得ると思います


1

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

そこに一歩一歩:

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

これを適用した後、正しいフォントが得られない場合は、カスタムフォントをダブルクリックし、上部のフォント名が表示されることを注意深く確認し、このフォントをコピーして貼り付けます。ここで、[UIFont fontWithName:@" here past your Custom font Name" size:20] 正しい答えが得られることを願っています

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.