【发布时间】:2020-01-20 13:17:15
【问题描述】:
我正在开发一个用户可以安装不同自定义字体的应用程序。该应用程序向用户显示他可以安装的字体列表。 (本例提供了 3 种随机字体)
字体是在用户打开应用时下载的,字体是通过这个函数动态加载的。 info.plist 中没有添加自定义字体。
func install_font(font_path : String) -> Bool
{
let font_data = try! Data(contentsOf: URL(fileURLWithPath: font_path))
if let provider = CGDataProvider.init(data: font_data as CFData)
{
var error: Unmanaged<CFError>?
let font:CGFont = CGFont(provider)!
if (!CTFontManagerRegisterGraphicsFont(font, &error))
{
print(error.debugDescription)
return false
}
else
{
return true
}
}
return false
}
直到现在我一直在使用这个函数,但这会显示所有字体:已安装的字体和动态加载的字体。
func show_all_fonts()
{
UIFont.familyNames.forEach({ familyName in
let fontNames = UIFont.fontNames(forFamilyName: familyName)
print(familyName, fontNames)
})
}
有没有办法只显示已安装的字体?我需要一种方法来区分已安装的字体与动态加载的字体,因此我可以在表格单元格上为已安装的字体打勾。
【问题讨论】:
-
也许这个问题对你有帮助stackoverflow.com/questions/44613397/…
-
我不太明白,如果你想将你的字体与原生字体区分开来,你为什么不简单地将结果 show_all_fonts() 与 show_only_my_custom_fonts() 进行比较,你已经有了名单?
-
因为在我将自定义字体加载到内存后,即使我没有安装它们,它们也会显示在 show_all_fonts() 上。
-
@mbabaev 您的链接非常有用,可以为我指明正确的方向,干杯
标签: ios swift cocoa-touch