iOSでカスタムttf/ttcフォントを使用する方法、cocosbuilderでフォントを指定する方法

4116 ワード

iOSではttf/ttcフォントをカスタマイズする方法を使って、ネットで検索してみましたが、まだはっきり言っていないところがあるので、もう少しまとめて整理する必要があると思います.(結論をすばやくまとめることができます)
まず、コンセプトを明確にします.ここで説明するttf/ttcフォントの使用方法は、iOSが独自に構築したメカニズムを使用してフォントをレンダリングすることです.すなわち、UIrontがフォントをレンダリングしてテキストをマップします.そのため、iOSのいくつかの既定のルールに合致しなければなりません.
ルールは2つあります.1)iOSシステムにフォントを見つけさせる2)iOSシステムにフォントの名前を指定してフォントを作成します.
最初のルールはみんな知っていますinfoです.plistで指定UIAppFonts、すなわちplistエディタで選択
Font
s
provided byアプリケーションは、itemを追加し、各itemはttfファイル名です.
UIAppFontsに関する公式文書の解釈は次のとおりです.UIAppFonts ( Array - iOS) specifies any app-provided fonts that should be made available through the normal mechanisms. Each item in the array is a string containing the name of a font file (including filename extension) that is located in the app’s bundle. The system loads the specified fonts and makes them available for use by the app when that app is run
[ソース:https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Introduction/Introduction.html]
ここでは、接尾辞を含むフォントファイルの名前を記入します.例えば、font 1.ttf.実はここに問題がありますが、このttfファイルはどこに置くべきですか?公式ドキュメントはbundleの中にあると言っていますが、もちろんbundleのルートディレクトリに置くのは大丈夫です.多くの人がそうしていますが、サブディレクトリに置きたいなら?例えばres/fontsの中です.res/fonts/font 1のような相対的なパスをここに記入することができます.ttf、これによりシステムもフォントファイルを見つけることができます.
もう一つの問題は、フォントをダウンロードしたいならいいですか?例えばフォントが大きすぎてbundleに電話したくない.公式ドキュメントによると、明らかにだめですね.彼はbundleの中に私たちが記入した経路でフォントファイルを探すだけで、appのDocumentsディレクトリには行きません.しかし、いくつかのゲームはダウンロードできるようですが、彼らはどのように実現していますか?iOSシステムの組み込みメカニズムを使用してフォントをレンダリングするのではなく、freetypeなどttfを解析できるライブラリを使用してレンダリングするべきだと思います.
ここでもう一つ注意したいことがあります.フォントはシミュレータで使えますが、本物にはありません.フォントが入っていない可能性がありますが、フォントをインストールして、シミュレータでこのフォントを見つけることができます.
また、ttfファイルに加えて、ttcファイルを使用することもできます.ttcはttfの集合であり、1つのttcに複数のfont familyを含めることができます.
2つ目のルール:UIFOntのインタフェースの作成を参照してください:[UIFOnt fontWithName:fntName size:nSize];ここのfntNameは何ですか?公式ドキュメントを参照してください.
fontName
    The fully specified name of the font. This name incorporates both the font family name and the specific style information for the font.
[ソース:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIFont_Class/Reference/Reference.html#//apple_ref/occ/clm/UIFont/fontWithName:size:]
すなわちfont family nameまたはspecific style informationである.私たちは通常、フォント帳にはこの2つの名前が見えません.小さなプログラムで見ることができます.
void printAllFonts()
{
    NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]];
    NSArray *fontNames;
    
    NSInteger indFamily, indFont;
    
    for(indFamily=0; indFamily<[familyNames count];++indFamily)
    {
        NSLog(@"Family name:%@", [familyNames objectAtIndex:indFamily]);
        
        fontNames = [[NSArray alloc] initWithArray:[UIFont fontNamesForFamilyName:[familyNames objectAtIndex:indFamily]]];
        
        for(indFont=0; indFont<[fontNames count];++indFont)
        {
            NSLog(@"\tFont name:%@",[fontNames objectAtIndex:indFont]);
        }
        
        [fontNames release];
    }
    
    [familyNames release];
}
これはシステム内のすべてのフォントのfamily nameとfont nameを出力します.例:
Family name:Heiti SC     Font name:STHeitiSC-Medium     Font name:STHeitiSC-Light
Family name:FZChaoCuHei-M10S     Font name:FZCCHJW--GB1-0
FZChaoCuHei-M 10 Sは、自分で追加したttfフォントです.普通はfamily nameでいいです.
追加福利厚生:cocos builderでttfフォントを指定する
cocos builderにはUser Fontsという項目があり、リソース内のttfファイルを選択できますが、font 1などを選択するとttfに入って、あなたは戻って全然役に立たないことに気づいて、cocos builderは自分でも表示できなくて、ゲームの中でもだめです.
実際には、FZChaoCuHei-M 10 Sのようなfont family nameをttfファイル名として直接使用する方法もあります.ttfはファイル名として、cocos builderで選択すればいいです.
迅速なまとめ:
1)
Font
s
provided byアプリケーションは相対パスを使用して、bundleのサブディレクトリにttf/ttcフォントを配置することができます.例えば、res/fonts/font 1.ttf
2)iOS内蔵メカニズムUIFOntを使用するとフォントをダウンロードしてから使用することはできません.freetypeを使用してフォントのレンダリングを自分で実現する必要がある場合は
3)ttfファイルに加えて、ttcファイルを使用することもできます.ttcはttfの集合であり、1つのttcに複数のfont familyを含めることができます.
4)Cocos Builderでカスタムttfフォントを設定するにはfont family nameをttfファイル名として使用する必要があります.