从获得的ttf文件字型(Get font face from ttf file)

2019-10-17 16:37发布

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

要在代码中使用它们,我需要知道装载的字体的家庭。 那么,有没有办法做到这一点?

更新:

我不能以某种方式进行硬编码字体系列,从服务器引起我的应用程序加载它。 当然,是通过在服务器响应字体系列的一种方式,但现在我正在寻找一个更好的版本,不影响服务器(不需要去改变它)。

Answer 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);
}


Answer 2:

在文档看到名为获取可用字体名称的部分。 你可以列出所有的姓氏,并希望家人的个人字体名称。 我通常只是暂停调试器和命令行调用的函数自己。 这是获取iOS版将使用名称最安全的方式。 或者你说的是下载字体和加载它们? 这将需要比只知道他们的名字了。

编辑好了,那么你正在下载的字体。 在这种情况下,你将不得不放到核心文本的世界。 请参见本参考上手(讲究所谓的功能“注册字体”)。 如果注册成功,然后它会显示使用上述方法。



Answer 3:

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

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]);
   }
}


文章来源: Get font face from ttf file