在 iOS 中下载并安装自定义字体

Downloading and installing a custom font in iOS

我在这里搜索了这个问题的答案,但我没有找到任何可以用来获得答案的帖子。我只找到了有关将字体预安装到应用程序的 plist 的答案,这对我不起作用。

我想做的是从 URL 下载字体,将文件本地存储到应用程序,然后在控件中安装或使用该字体。

我正在将字体安装到平板电脑上使用。我可以使用下面的代码将它添加到 CTFontManager 而不会出现任何问题。

private func InstallFont(dest:String)
{
    let fontData = NSData(contentsOfFile: dest)!

    let dataProvider = CGDataProviderCreateWithCFData(fontData)
    let cgFont = CGFontCreateWithDataProvider(dataProvider)!

    var error: Unmanaged<CFError>?
    if !CTFontManagerRegisterGraphicsFont(cgFont, &error)
    {
        print("Error loading Font!")
    }
}

我面临的问题是我似乎无法在应用程序的任何位置找到我安装的字体,我尝试像下面那样设置它但只是进入默认设置,这告诉我找不到它。

self.font = UIFont(name: "Font Name", size: 20.0)

我还遍历了字体系列以查看它是否已安装,但也没有成功。

for x in UIFont.familyNames()
{
    print(x)

    for z in UIFont.fontNamesForFamilyName(x)
    {
        print("== \(z)")
    }
}

我想要达到的目标是否可行?如果是这样,我做错了什么?

有可能。我在 github 中创建了一个示例项目。您只需添加以下行。

if !CTFontManagerRegisterGraphicsFont(cgFont, &error)
{
    print("Error loading Font!")
}
else
{
    let fontName = CGFontCopyPostScriptName(cgFont)
    uiFont = UIFont(name: String(fontName) , size: 30)
}

感谢 Michael Dautermann,他是对的。

Github project link

根据答案 in this related question,您应该能够下载您的字体并按照您已经在做的方式注册它(听起来您做对了),但您只需要获取后记名称并使用它来创建相应的 UIFont:

var uiFont : UIFont?
let fontData = NSData(contentsOfFile: dest)!

let dataProvider = CGDataProviderCreateWithCFData(fontData)
let cgFont = CGFontCreateWithDataProvider(dataProvider)!

var error: Unmanaged<CFError>?
if !CTFontManagerRegisterGraphicsFont(cgFont, &error)
{
    print("Error loading Font!")
} else {
    let fontName = CGFontCopyPostScriptName(fontRef)
    uiFont = UIFont(name: fontName, size: 30)
}