2015-12-01 36 views
4

我在这里搜索了这个答案,但我还没有找到任何可以用来获得答案的帖子。我只找到预安装字体的应用程序的plist的答案,这将不适合我。在iOS中下载和安装自定义字体

我想要做的是从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)") 
    } 
} 

我试图实现甚至可能吗?如果是这样我做错了什么?

回答

3

这是可能的。我在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

enter image description here

1

根据答案in this related question,你应该能够下载字体和注册它,你已经在做(这听起来像你正在做正确)的方式,但你只需要获得Postscript名称并使用该名称创建相应的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) 
}