iOS 7のカスタムフォント


102

ゲームを開発していますが、アプリでカスタムフォントを使用したいと考えています。それが重要な場合は、SpriteKitを使用しています。これを使ってみました https://github.com/deni2s/IBCustomFonts私はそれをこのフォントで動作させることができませんhttp://www.fontspace.com/freaky-fonts/emulogic

いろいろ試して、フォントをアプリのinfo.plistに登録しました...誰が何が起こっているのか知っていますか?


コードでフォントを使用するときに、フォントの正しい名前を使用していますか?
Nick 14

1
あなたがこのブログは役に立つかもしれcodewithchris.com/...
徐殷

回答:


277

まず第一に、SpriteKitは何の違いもないと仮定しています。

  1. .otfまたは.ttfのフォントをプロジェクトにコピーする必要があります。たとえば、サポートファイルにあります。
  2. .plistファイルを編集する必要があります。「アプリケーションによって提供されるフォント」キーをplistとアイテム0に追加しますコピーしたフォントの正確なファイル名を拡張子付きのサポートファイルにコピーします。例:「JosefinSansStd-Light_0.otf」
  3. アプリにインポートしたフォントがアプリ自体にパックされていることを確認してください。それには、ターゲットビルドフェーズバンドルリソースのコピーの順に選択します。そこにフォントが表示されない場合は、サポートファイルからドラッグします

最後に、アプリの起動時にすべてのフォントをリストして、フォントの使用可能な名前を確認したいとします。これは、次の小さなコードで行います。

NSArray *fontFamilies = [UIFont familyNames];
for (int i = 0; i < [fontFamilies count]; i++)
{
    NSString *fontFamily = [fontFamilies objectAtIndex:i];
    NSArray *fontNames = [UIFont fontNamesForFamilyName:[fontFamilies objectAtIndex:i]];
    NSLog (@"%@: %@", fontFamily, fontNames);
}

印刷結果でフォントを検索します。たとえば、「Josefin」を検索すると、実際のフォント名は「JosefinSansStd-Light」であることがわかります。その後、次の方法でそのフォントを使用する必要があります。

UIFont *customFont = [UIFont fontWithName:@"JosefinSansStd-Light" size:20];

iOS8では、フォントをプロジェクトに直接追加すると、それらはインターフェイスビルダーに表示されます。これを考慮してコードを変更しますが、プログラムでiOS7のフォントを設定し、xCode6インターフェイスビルダーで選択します。PS。xCode6のInterface Builderは、以下のコードにコピーアンドペーストできる正しいフォント名を提供します。

#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

 if(SYSTEM_VERSION_LESS_THAN(@"8.0"))
    {
        UIFont *customFont = [UIFont fontWithName:@"OpenSans-Light" size:32];
        self.registerLabel.font = customFont;  
    }

これがお役に立てば幸いです。


ありがとう!わかった!P:それはロードではなかったので、問題は、私は、ファイルをサポートに追加するwan'tた
ホセ・マリア・

1
私は次のplistキーを使用しなければなりませんでしたUIAppFonts
Mike Flynn

1
iOS7 / Xcode 5.1.1からiOS8 / Xcode 6.0プロジェクトにプロジェクト全体を再作成しました。カスタムフォントは、2.stepを実行するまで表示されませんでした。GR8解説!
MB_iOSDeveloper 2014年

1
Swiftでフォント名を取得するための同じコード: let fontFamilies = UIFont.familyNames() for familyName in fontFamilies { let fontNames = UIFont.fontNamesForFamilyName(familyName as String) println("\(familyName): \(fontNames)") }
Alexander Bekert

1
すべてのフォント名を印刷するためのいくつかの迅速なコード:for name in UIFont.familyNames() { debugPrint(UIFont.fontNamesForFamilyName(name)) }
gimenete '30

24

カスタムフォントを使用しても問題ありません。次の手順を実行します:

  1. 「アプリケーションが提供するフォント」エントリを追加して、info.plistにフォントを登録します。フォント名ではなく、フォントファイル名を入力します。font.ttfのように(私はあなたがすでにそれをしたと思います)
  2. プロジェクトナビゲーターでプロジェクトに移動し、プロジェクト名をクリックして、「ビルドフェーズ」に移動し、「バンドルリソースのコピー」を下に見て、ファイルがたくさんあるので、「+」記号を検索します。ポップアップウィンドウが開き、プロジェクトファイルが表示されます。フォントファイルを検索し、バンドルに追加します。
  3. 最後にフォント名を確認してください。コードで使用する場合は、ファイル名ではなくフォント名を使用する必要があります。フォント名を確認するには、Finderでフォントファイルをダブルクリックすると、ウィンドウが開き、フォントが表示されます。そのウィンドウのタイトルを確認してください。これは、使用する必要があるフォントの名前です。

アドバイスとして、その名前を..Prefix.pchファイルにマクロとして追加します。フォントを複数回使用する必要がある場合は、プロジェクトで使用する方が簡単です。

あなたが持っていたと思う問題は、フォントを適切に登録したが、それがApp Bundleにコピーされなかったことです。そのため、アプリを実行したときにフォントが見つかりませんでした。そのため、ステップ2が重要です。私は多くの時間を費やして初めてそれを理解しようとしました:)


2
私にとっての鍵はフォントのタイトルでした。ありがとう!
オスカー

20

これを迅速に達成するには

アプリの起動時にすべてのフォントを一覧表示して、フォントの使用可能な名前を確認したい場合。これは、次の小さなコードで行うことができます。

    UIFont.familyNames.forEach {
        print("fontFamily: \($0), fonts: \(UIFont.fontNames(forFamilyName: $0))")
    }

またはUIFont.familyNames.forEach { print("fontFamily: \($0), fonts: \(UIFont.fontNames(forFamilyName: $0))") }
Daniel

5

何度も試してみて、これらの答えを得ることができたことはありません。私がこれまでにカスタムフォントを取得して受け入れられた回答の指示に従う唯一の方法は、フォントを使用するストーリーボードに非表示のラベルを作成することです。プログラムでフォントを使用できます。奇妙でハックなことは知っていますが、うまくいきました。


1
あなたはまさに正しいです。plist、ターゲットプロジェクトのチェックマーク、ビルドフェーズなど、多くのチュートリアルですべてを調べ、最終的に正しいフォントファミリ名を見つけましたが、それでも機能しません。その後、私はあなたが言うように非表示のラベルを追加し、最後にそれが表示されました。Xcode 7.2を使用していますが、これはバグのようです。
DrZ214 2015

3

Xcode 6を使用している場合は、簡単です。fontプロジェクトにフォルダーを追加し、そのフォルダーにフォントを追加すれば、準備は完了です。

ここに画像の説明を入力してください


7
目的のターゲットにも必ず追加してください。卑劣なホビットXcode。
Matt Parkins、2014年

3

上記のいずれの方法もうまくいかず、カスタムフォントを「プログラム的に」のみ使用している場合(つまり、どのxibでも使用していなかった場合)、1つのxibのどこかで、少なくとも一度は使用する必要があります。 。

(PSスチュアートクラーク-すでにこれに答えたので、私にはクレジットはありません。しかし、私は彼の答えを見逃したため、言い換えて別の答えとして投稿することにしました。それを読んだとき、私にはわかりませんでした。 xibでカスタムフォントをテストしているときに偶然にこの解決策を試してみたところ、プログラムで他の場所で機能することがわかりましたが、xibからフォントを削除すると、プログラムで機能しなくなりました。)


2

Swift 3用に更新されました。

let fontFamilies:[String] = UIFont.familyNames

for fontFamily: String in fontFamilies {
    let fontNames: [String] = UIFont.fontNames(forFamilyName: fontFamily)
    print("\(fontFamily)  \(fontNames)");
}

0

たぶん簡単な修正-フォントがすでに機能しているときにこれでうまくいきましたが、新しいラベルなどは希望のフォントを表示しませんでした:

クリーン、ディープクリーン、空の派生データフォルダー。


0
please try below code.
@end
@implementation UILabel (CustomFont)
-(void)setFontName:(NSString *)value{
CGFloat newsize = (self.font.pointSize * [UIScreen mainScreen].bounds.size.width)/320;
[self setFont:[UIFont fontWithName:self.font.fontName size:newsize]];
}
@end
@implementation UITextField (CustomFont)
-(void)setFontName:(NSString *)value{
CGFloat newsize = (self.font.pointSize * [UIScreen mainScreen].bounds.size.width)/320;
[self setFont:[UIFont fontWithName:self.font.fontName size:newsize]];
}
@end
@implementation UIButton (CustomFont)
-(void)setFontName:(NSString *)value{
CGFloat newsize = (self.titleLabel.font.pointSize * [UIScreen mainScreen].bounds.size.width)/320;
[self.titleLabel setFont:[UIFont fontWithName:self.titleLabel.font.fontName size:newsize]];
}
@end
@end

@interface UILabel (CustomFont)
-(void)setFontName:(NSString *)value;
@end
@interface UITextField (CustomFont)
-(void)setFontName:(NSString *)value;
@end
@interface UIButton (CustomFont)
-(void)setFontName:(NSString *)value;
@end
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.