20

http://support.apple.com/kb/HT5878にある iOS 7 フォント リストの下部に、「アプリは必要に応じて次のフォントをダウンロードできます」という見出しのセクションがあります。

これは何を意味するのでしょうか?これらのフォントをどのように含めますか? また、カスタム フォントを含める場合とどう違うのでしょうか?

4

2 に答える 2

15

これは興味深いことです。ほとんど文書化されていない機能ですが、問題なく使用でき、アプリが拒否されることはありません。これを自分で調査しようとしただけで、この質問にたどり着きました。文書化されていることがわかったのは、それを使用する方法を示すサンプルコードです: DownloadFont

iOS 6 以降でオンデマンドでフォントをダウンロードする方法を示します。

iOS 6 では、アプリケーションがフォントをオンデマンドでダウンロードする機能を追加しました。iOS 6 でインストールされるフォントに加えて、アプリケーションは必要に応じて追加のフォントのリストをインストールできます。

リストされているフォントは、iOS で使用するために Apple によって既にライセンスされていますが、余分なディスク容量を使用するため、標準の iOS ファームウェアにはバンドルされていません。これは、Apple が新しいフォントを提供する方法であり続けると思います (OS の UI の一部がそれを使用しない限り)。UIAppFontsさらに、 Info.plistのキーを使用してフォントを追加するのとは異なり、フォントがダウンロードされると、すべてのアプリで使用できるようになります。

于 2013-11-15T09:52:55.420 に答える
1

これは、フォントを非同期的にダウンロードしてUITextView.

- (void)asynchronouslySetFontName:(NSString *)fontName toTextView:(UITextView *)textView {
    CGFloat size = 24.0f;
    UIFont *font = [UIFont fontWithName:fontName size:size];

    if (font && ([font.fontName compare:fontName] == NSOrderedSame || [font.familyName compare:fontName] == NSOrderedSame)) {
        textView.font = font;
        return;
    }

    NSMutableDictionary *attrs = [NSMutableDictionary dictionaryWithObject:fontName forKey:kCTFontNameAttribute];
    CTFontDescriptorRef desc = CTFontDescriptorCreateWithAttributes((__bridge CFDictionaryRef)attrs);

    NSMutableArray *descs = [NSMutableArray array];
    [descs addObject:(__bridge id)desc];
    CFRelease(desc);

    __weak UITextView *weakTextView = textView;

    CTFontDescriptorMatchFontDescriptorsWithProgressHandler((__bridge CFArrayRef)descs, NULL,  ^(CTFontDescriptorMatchingState state, CFDictionaryRef progressParameter) {
        if (state == kCTFontDescriptorMatchingDidFinish) {
            dispatch_async(dispatch_get_main_queue(), ^{
                weakTextView.font = [UIFont fontWithName:fontName size:size];
            });
        }

        return YES;
    });
}

ダウンロード可能なすべてのフォントのリストを次に示します。http://iosfontlist.com

于 2015-07-09T05:40:58.260 に答える