2015-12-01 63 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) 
}