【问题标题】:List of installed fonts已安装字体列表
【发布时间】: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


【解决方案1】:

为什么不获取并保留安装后首次启动应用程序时安装的字体列表。这样,您基本上可以在持久字体列表上与首次启动后的字体列表运行联合。

【讨论】:

  • 是的,我可以列出这样的清单。但是如果用户最小化应用程序,通过配置文件安装字体然后恢复应用程序,我不知道他安装了哪种字体。每次用户恢复应用程序或打开应用程序时,我都需要运行搜索和识别算法,以区分下载的字体和安装的字体。
  • 我认为最好的解决方案是使用你的算法,每次用户从后台恢复应用程序时,释放所有加载的自定义字体,搜索和识别,然后再加载它们。但问题是,如何发布动态加载的自定义字体?
  • 刚刚发现 CTFontManagerRegisterGraphicsFont 有一个叫 CTFontManagerUnregisterGraphicsFont 的兄弟,可以解决我的问题。
猜你喜欢
  • 2012-01-29
  • 2010-09-10
  • 2021-01-12
  • 1970-01-01
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
相关资源
最近更新 更多