20

在位于此处的 iOS 7 字体列表http://support.apple.com/kb/HT5878的底部有一个标题为“应用程序可以在必要时下载以下字体”的部分。

这是什么意思?如何包含这些字体,这与包含自定义字体有何不同?

4

2 回答 2

15

这很有趣,这是一个几乎没有记录的功能,但它似乎可以使用并且不会让您的应用程序被拒绝。只是试图自己研究这个让我想到了这个问题,而不是别的。我能找到的所有文档都是显示如何使用它的示例代码:DownloadFont

演示如何在 iOS 6 及更高版本上按需下载字体。

在 iOS 6 上,我们添加了应用程序按需下载字体的功能。除了随 iOS 6 安装的字体外,应用程序还可以根据需要安装附加字体列表。

列出的字体已获得 Apple 的许可,可在 iOS 中使用,但由于占用了额外的磁盘空间,它们并未与标准 iOS 固件捆绑在一起。我认为这将继续是 Apple 提供新字体的方式(除非操作系统 UI 的一部分使用它)。此外,与使用UIAppFontsInfo.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 回答