在我的iOS应用程序中,我使用从文件动态加载的自定义字体。
要在代码中使用它们,我需要知道加载字体的系列。那么,有什么方法可以做到吗?
更新:
我无法以某种方式硬编码字体系列,导致我的应用程序从服务器加载它。当然,有一种方法可以在服务器响应中传递字体系列,但是现在我正在寻找一个不影响服务器的更好的版本(不需要更改它)。
答案 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]);
}
}