web-dev-qa-db-ja.com

iOS 7のカスタムフォント

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

さまざまなことを試しましたが、アプリのinfo.plistにフォントを登録しました...何が起こっているのか誰にもわかりますか?

102
José María

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

  1. プロジェクトにコピーした.otfまたは.ttfのフォントが必要です。たとえば、サポートファイルで。
  2. 。plistファイルを編集する必要があります。 「アプリケーションが提供するフォント」キーをplistおよびItem 0拡張子付きのサポートファイルにコピーしたフォントの正確なファイル名をコピーします。たとえば、「JosefinSansStd-Light_0.otf」
  3. アプリにインポートしたフォントがアプリ自体にパックされていることを確認してください。 Target、次にBuild Phases、次にバンドルリソースのコピー。フォントが表示されない場合は、Supporting Filesからドラッグします。

最後に、アプリの起動時にすべてのフォントを一覧表示して、使用可能なフォント名を表示するだけです。これを行うには、次の小さなコードを使用します。

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のインターフェイスビルダーは、以下のコードにコピーアンドペーストできる正しいフォント名を提供します。

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

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

277
jovanjovanovic

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

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

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

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

24
zago

Swiftでこれを実現するには

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

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

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

5
Stuart Clark

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

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

3
Wojtek

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

enter image description here

3
Idris

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

let fontFamilies:[String] = UIFont.familyNames

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

たぶん簡単な修正-フォントがすでに機能しているときにこれが私のためにしたが、新しいラベルに目的のフォントが表示されませんでした:

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

0
brainray
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
0
herry.master