如何从otf或ttf文件获取字体名称?
我在我以前的应用程序中使用了自定义字体。
文件名是“ProximaNova-Regular.otf”,并加载我刚刚使用的字体…
[UIFont fontWithName:@"ProximaNova-Regular" size:20];
这工作完美。
现在在这个新的应用程序,我有三个字体文件…
Dude_Willie.otf Impact handsean.ttf
但我不知道如何加载这些。
我努力了
[UIFont fontWithName:<the file name> size:20];
但是这只是回到使用Helvetica。
我怎样才能find使用什么名字?
右键点击TTF – >获取信息
“全名”就是你要找的。
这就是TTF的工作。
编辑:
我只是使用了一个与“获取信息”中的“全名”名称不同的字体。
为了编译这个答案,如果上面的快速检查不起作用,请在您的项目中运行以下代码:
for (NSString *fontFamilyName in [UIFont familyNames]) { for (NSString *fontName in [UIFont fontNamesForFamilyName:fontFamilyName]) { NSLog(@"Family: %@ Font: %@", fontFamilyName, fontName); } }
并search您要使用的字体的正确名称。
Swift 3.0代码:
for fontFamilyName in UIFont.familyNames{ for fontName in UIFont.fontNames(forFamilyName: fontFamilyName){ print("Family: \(fontFamilyName) Font: \(fontName)") } }
按照以下四个简单步骤在iOS应用程序中添加和使用新字体:
- 将your_new_font.ttf或your_new_font.otf添加到您的Xcode项目
- 在项目的info.plist中,为your_new_font.ttf或your_new_font.otf添加一个新条目到
UIAppFonts
数组(这个文本的纯文本是'应用程序提供的字体') - 在这一点上,我build议添加这个临时块的debugging代码来转储您的应用程序可访问的所有字体,包括您新添加的your_new_font:
for(NSString *fontfamilyname in [UIFont familyNames]) { NSLog(@"family:'%@'",fontfamilyname); for(NSString *fontName in [UIFont fontNamesForFamilyName:fontfamilyname]) { NSLog(@"\tfont:'%@'",fontName); } NSLog(@"-------------"); }
- 在debugging输出中,查找新字体的“族”和“字体”名称。 将所显示的任何字体作为与您的新字体系列对应的“字体”名称(可能与您的新字体“系列”相关联的多个“字体”)传递给
UIFont *myNewFont = [UIFont fontWithName:@"font_name_from_debug_output" size:20]
,你应该做生意!
要在iOS中使用字体,您必须根据字体的FULL NAME (PostScript Name)加载字体,该字体有时(通常是)与字体的实际FILE NAME不同 。
假设你自己将字体文件“Arial-regular.ttf”重命名为“foo.ttf”。 包含在刚更名的字体文件中的字体仍然是“Arial-regular”。
有一些很好的编程方法可以在该线程上获取字体名称,但是我使用命令行有不同的方法。
如果您在Mac或Linux上,只需在命令行中运行此脚本(您使用自定义字体的目录)(使用fontconfig中的fc-scan
实用程序(很可能已安装),但是如果没有,则可以通过自制程序: brew install fontconfig
):
for file in "$arg"*.{ttf,otf}; do fc-scan --format "%{postscriptname}\n" $file; done
下面是在我的~/Library/Fonts
目录上运行的上述命令的屏幕截图:
上面的脚本将遍历当前目录中的所有.ttf
和.otf
文件,然后打印出每种字体的PostScript名称 ,您可以使用该字体来引用XCode或其他地方的字体文件。
如果你想获得一些额外的信息(PostScriptName,Filename)和一些颜色编码,你可以运行这个替代脚本:
for file in "$arg"*.{ttf,otf}; do postscriptname=$(fc-scan --format "%{postscriptname}\n" $file); printf "\033[36m PostScript Name:\033[0m %s \e[90m(%s)\033[0m\n" "$postscriptname" "$file"; done
这比在你的AppDelegate.m文件中复制粘贴代码快一点,以便每次你想添加一个新的字体文件,这是stream行的方法,打印出来的名字,这也比在FontBook中打开Font快检查PostScript名称。
有用的提示:如果你在terminal中使用了上面的脚本,那么你只需input一个命令就可以获得当前目录中所有文件的所有PostScript字体名称(我的函数叫做fontnames
所以我只需要这样做的目的是在目录中的terminal键入字体,并在其中包含字体,PostScript名称将自动打印,这样可以节省开发工作stream程的时间,并在需要时使用这个方便的脚本。
希望这可以帮助!
- 安装字体
- 在Mac上打开字体书应用程序
- select字体并点击“信息”button
- 您正在查找的名称是PostScript名称
你想知道如何得到这个名字: –
NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]]; for (NSInteger indFamily=0; indFamily<[familyNames count]; ++indFamily) { NSLog(@"Family name: %@", [familyNames objectAtIndex:indFamily]); NSArray *fontNames = [[NSArray alloc] initWithArray: [UIFont fontNamesForFamilyName:[familyNames objectAtIndex:indFamily]]]; for (NSInteger indFont=0; indFont<[fontNames count]; ++indFont) { NSLog(@" Font name: %@", [fontNames objectAtIndex:indFont]); } }
希望它可以帮助你…
Swift 3.0
for familyName in UIFont.familyNames { for fontName in UIFont.fontNames(forFamilyName: familyName ) { print("\(familyName) : \(fontName)") } }
在将字体添加到项目/应用程序之后,添加此代码(可能仅在应用程序代理didFinishLaunchingWithOptions方法中),以便为您的应用程序打印出所有可用的字体。 从那个列表中你应该能够识别你之后的字体。 之后不要忘记删除不必要的代码。
for (NSString *fontFamilyName in [UIFont familyNames]) { for (NSString *fontName in [UIFont fontNamesForFamilyName:fontFamilyName]) { NSLog(@"Family: %@ Font: %@", fontFamilyName, fontName); } }
Swift 1.2:
for familyName in UIFont.familyNames() { for fontName in UIFont.fontNamesForFamilyName(familyName as! String) { println("\(familyName) : \(fontName)") } }
您也可以使用otfinfo –info arial.ttf从命令行获取名称。 后记名称是您需要传递给UIFont构造函数的名称。
如果要以编程方式查找给定字体文件的字体名称:
func loadFontName(for file: URL) throws -> String { let data = try Data(contentsOf: file) guard let provider = CGDataProvider(data: data as CFData) else { throw Error("Could not create data provider") } let font = CGFont(provider) guard let name = font.postScriptName else { throw Error("Could not get font name from font file") } return name as String }
根据需要用您自己的可抛出的Error
对象replace。
logging字体文件的家族名称,然后访问字体:
// You can log all font family names suing **fontNamesForFamilyName** NSLog(@" font name %@", [UIFont fontNamesForFamilyName:@"the file name"]);
希望它可以帮助你。
另一种不涉及扫描模拟器或设备上存在的所有默认字体的“快速,实用”的破解方法是在故事板中使用字体。 然后,如果使用文本编辑器编辑故事板,则如果search“customFonts”标签,则可以看到与“内部”名称一起使用的字体:
<customFonts key="customFonts"> <array key="Linotype - AvenirNextLTPro-Bold.otf"> <string>AvenirNextLTPro-Bold</string> </array> <array key="Linotype - AvenirNextLTPro-Regular.otf"> <string>AvenirNextLTPro-Regular</string> </array> <array key="TradeGothicLTPro-BdCn20.otf"> <string>TradeGothicLTPro-BdCn20</string> </array> </customFonts>