ios - 追加 - xcode font ttf




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

Swift、code way:(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.2より前のiOSに関するものです。 3.2以降、この機能は以下のsamvermetteの答えを使って簡単に達成できます。これを反映するためにAccepted Answer(コマンドからsamvermetteへ)を変更しました。 私は両方の答え(upvotesの他に)に信用を与えることはできませんが、どちらも良いです。

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

私は以下のリンクを見つけました:

しかし、これらは自分で各グリフをレンダリングする必要があります。これはハードワーク、特に複数行のテキストの場合は多すぎます。

私はまた、それが不可能であることを正直に言っている投稿を見つけましたが、正当な理由がないので、私は決定的な答えを探しています。

EDIT - 失敗-[UIFont fontWithName:size:]実験

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

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

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

編集 - 私はXまたはYのドキュメントを読むように教えてくれる多くの回答がありました。私はこれらのすべてを広範に実験し、どこにもありませんでした。 あるケースでは、XはiPhoneではなくOS X上でのみ関連性があることが判明しました。 したがって、私はこの質問に対して奨励金を設定しています。私は、デバイス上で動作させるために十分な情報で回答した回答者(ドキュメント化されたAPIのみを使用)を提供する最初の人に賞金を授与します。 シミュレータで作業することも、ボーナスになります。

編集 - 賞金は投票数が最も多い回答に対して自動的に賞金をあげます。 面白い。 誰も実際に質問を解決した回答を提供した人はいません。自分のUILabelサブクラスをコーディングするソリューションは、私の本質的な機能であるワードラップをサポートしていません。


1つの重要な注意点:フォントに関連付けられた「PostScript名」を使用する必要があります。氏名や姓は使用しないでください。 この名前は通常、フォントの通常の名前とは異なる場合があります。


iOS 3.2以降でこれをサポートしています。 iPhone OS 3.2の新機能からのストレート

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

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

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

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

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

また、フォントがCopy Bundle Resourcesにあることを確認してください。


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

  1. XCodeのプロジェクトのResourcesフォルダにフォントファイル( Chalkduster.ttfなど )を追加します。
  2. info.plistを開き、UIAppFontsという新しいキーを追加します。 このキーのタイプは配列でなければなりません。
  3. 拡張子( " Chalkduster.ttf ")を含むカスタムフォント名をこの配列に追加します。
  4. [UIFont fontWithName:@"Real Font Name" size:16]します。

しかし、「本物のフォント名」は必ずしもフォントブックに表示されているとは限りません。 最善の方法は、デバイスに表示されるフォントと正確な名前が何であるかをデバイスに尋ねることです。

私はuifont-name-grabberをuifont-name-grabberに投稿しました。

あなたが望むフォントをxcodeプロジェクトにドロップし、そのファイル名をplistに追加し、作成しているデバイス上でファイル名を実行すると、 UIFont fontWithName: expectsという名前を使用して完全なフォントリストが電子メールで送信されます。


ATSApplicationFontsPath

あなたのアプリケーションリソースフォルダにフォントファイルを含めることができる単純なplistエントリで、あなたのアプリで「うまくいく」。


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

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

2)あなたのデバイスでこのフォントを利用できるようにするには、 info.plistを開き、 Fonts provided by applicationキーでFonts provided by applicationを追加します。 それはアイテム0のキーを含むでしょう、あなたは値としてあなたのフォント名を追加する必要があります。 フォント名は、フォントファイル名と異なる場合があります。 しかし、まず、この作業のほとんどの場合ファイル名を追加してみてください。

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

ここでは、フォント名を見つけるのに役立つ、この記事のコードを素早く紹介しています。

func allFonts(){

   for family in UIFont.familyNames(){

       println(family)


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

   }

}

EDIT

私はあなたのターゲットのビルドフェーズコピーバンドルリソースにフォントファイルを追加する必要があることを言及したいと思います。 それがなければ、デバイス上にフォントが表示されません。 予期しない動作につながる可能性があります。

たとえば、 UITextFieldにカスタムフォントがあるときにbugが発生しUITextFieldが、このフォントはBundleリソースにはありません。 そして、このtextfield viewcontrollerviewcontrollerにセグをすると、 viewDidLoad関数が呼び出されるまでに約4秒の遅延があります。 フォントの問題を解決すると、この遅延がなくなりました。 だから、それを2回確認することをお勧めします。 (rdar:// 20028250)Btw、私はバグを再現できませんでしたが、問題はフォントにあったと確信しています。


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

  1. Chalkduster.ttfのプロジェクトのResourcesフォルダにフォントファイル( 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

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

UILabelを拡張し、.ttfファイルの読み込みを処理する単純なモジュールを作成しました。 私はApacheライセンスの下でopensourceをリリースし、githubに載せましたHere.

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

それはGenericrichの答えのコードのいくつかを使用しています

ソースを参照してくださいHere.

または

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

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

  • このキーを配列にする

  • あなたが持っているフォントごとに、フォントファイル(拡張子を含む)のフルネームをUIAppFonts配列の項目として入力します

  • Info.plist保存する

  • あなたのアプリケーションでは、 [UIFont fontWithName:@"CustomFontName" size:15]UITextViewsUILabelsUITextViewsなどで使用するカスタムフォントを取得することができます。

詳細については


ここでは手順をステップごとに説明します。 特別なライブラリや特別なコーディングは必要ありません。

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

たいていの場合、問題はフォントではなくメソッドである。 それを行う最善の方法は、verdanaやgeogiaのように確実に動作するフォントを使用することです。 次に、意図したフォントに変更します。 それが動作しない場合は、多分フォント名が正しくないか、フォントが整形式のフォントではないかもしれません。


この手順に従う

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ファイルにUIAppFontsという名前のキーを追加します。

このキーを配列にする

あなたが持っているフォントごとに、フォントファイル(拡張子を含む)のフルネームをUIAppFonts配列の項目として入力します

Info.plistを保存するあなたのアプリケーションで正しいフォントが得られなかった場合はダブルクリックして、UILabelsで使用するカスタムフォントを取得するには、[UIFont fontWithName:@ "あなたのカスタムフォント名" size:20]慎重にトップサイドのフォント名が来て、このフォントをコピーして貼り付けてください。ここでは、[UIFont fontWithName:@ "ここでカスタムフォント名" size:20]

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


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

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

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

このフォントを適用した後、あなたが正しいフォントを取得しなかった場合、カスタムフォントをダブルクリックして、注意深くトップサイドのフォント名を見て、このフォントをコピーして貼り付けて[UIFont fontWithName:@" here past your Custom font Name" size:20]ください。


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

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


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


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

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

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

正しいものです。他の邪魔にならないようにしてください。フォント名を見つけて追加する際にまだ問題が起きている場合は、こちらのチュートリアルを参考にしてください。

iosアプリケーションでのカスタムフォントの使用


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

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

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

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

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

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


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

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

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


私はここで私の好きな短いチュートリアルの1つに従うことをお勧めします: http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/ : http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/この情報は、

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

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

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

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

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

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

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

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

私はこれをこうしました:

フォントをロードする:

- (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を参照してください)を調べる必要があります。

また、フォントが法的に埋め込み可能であることを確認する必要があります。 ほとんどの人はそうではなく、このようなことに特化した弁護士がいるので、警告を受けてください。


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

fotファイル(otfまたはttf)をドラッグすると、 "Add to targets"のチェックボックスをチェックしないでください。

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





fonts