从ttf文件获取字体

时间:2013-02-12 03:18:15

标签: ios fonts core-text font-family custom-font

在我的iOS应用程序中,我使用从文件动态加载的自定义字体。

要在代码中使用它们,我需要知道加载字体的系列。那么,有什么方法可以做到吗?

更新:

我无法以某种方式硬编码字体系列,导致我的应用程序从服务器加载它。当然,有一种方法可以在服务器响应中传递字体系列,但是现在我正在寻找一个不影响服务器的更好的版本(不需要更改它)。

4 个答案:

答案 0 :(得分:1)

您提到您从服务器获取字体。我找到了一个能够使用Linux服务器上的脚本解决问题的答案:https://stackoverflow.com/a/8005077/1126783

答案 1 :(得分:1)

字体加载我做了......

NSData *fontData = [NSData dataWithContentsOfFile:filePath];
if (fontData) {
    // create font from loaded data and get it's postscript name
    CGDataProviderRef fontDataProvider = CGDataProviderCreateWithCFData((CFDataRef)fontData);
    CGFontRef loadedFont = CGFontCreateWithDataProvider(fontDataProvider);
    NSString *postScriptName = (NSString *)CGFontCopyPostScriptName(loadedFont);

    // if the font with same postscript name wasn't already registered - do it
    if (postScriptName && ![UIFont fontWithName:postScriptName size:10]) {
        NSError *error;
        if (!CTFontManagerRegisterGraphicsFont(loadedFont, (CFErrorRef *)&error)) {
            NSLog(@"Can't load font: %@", error);
        }
    }

    CGFontRelease(loadedFont);
    CGDataProviderRelease(fontDataProvider);
}

答案 2 :(得分:0)

docs中,请参阅名为获取可用字体名称的部分。您可以列出所需的所有系列名称和单个字体名称。我通常只是暂停调试器并从命令行自己调用这些函数。获取iOS将使用的名称是最安全的方法。或者你在谈论下载字体并加载它们?这需要的不仅仅是了解他们的名字。

编辑好的,那么你正在下载字体。在这种情况下,您将不得不进入核心文本的世界。请参阅this reference以开始使用(注意名为&#34的函数;注册字体")。如果您成功注册它,它将显示使用上述方法。

答案 3 :(得分:0)

我从堆栈溢出的某个地方得到了这段代码。希望能帮助到你。它列出了所有加载的字体名称......

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(@"    Font name: %@", [fontNames objectAtIndex:indFont]);
   }
}
相关问题