2013-05-21 167 views
3

是否可以從網上下載.ttf文件並將其存儲在iPhone上。然後用它來做標籤和所有其他的東西?因爲我的客戶想要控制來自數據庫的字體,並且不想立即將字體放到xcode項目中。從網絡下載字體.ttf文件並在iPhone上存儲

所以在未來如果他想改變字體,他會添加新的字體到數據庫,應用程序將識別新的字體在網絡上(這已經完成與圖像,而不是一個問題),下載並使用字體。

謝謝。

回答

1

字體必須在應用程序的plist中設置,並且該文件在運行時不能更改,因此您需要使用已添加到其中的字體來編譯項目。

您必須以其他方式來實現它。

+0

那是什麼我還以爲......嗯,我會告訴他所有需要的字體到Xcode的項目,然後就調整其從數據庫中使用..所以我不能打開另一個自己創建的plist的字體? – user1832330

+0

它必須在應用程序的主plist中,這是在編譯時創建的,所以沒有什麼可以dom,對不起。如果它有用,請接受答案。 –

+0

謝謝你的幫助。 – user1832330

0

您可以使用FontLabel(https://github.com/vtns/FontLabel)或smth。類似於從文件系統加載ttfs。我不認爲你可以使用UILabel下載的字體。因爲你需要每種字體的plist條目。

+0

我會從數據庫下載ttf,然後在下載並添加到plist(系統或新建,自己創建的)時將它們用於標籤或任何其他文本。可能嗎? – user1832330

+0

FontLabel是UILabel的替代品。在iOS 4之前,這是使用自定義字體的唯一選擇。使用FontLabel你不需要一個plist入口 - 所以你的下載方法應該可以工作。 – calimarkus

3

其實這是可以動態字體到這樣iOS的運行:

NSData *fontData = /* your font-file data */; 
CFErrorRef error; 
CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)inData); 
CGFontRef font = CGFontCreateWithDataProvider(provider); 
if (! CTFontManagerRegisterGraphicsFont(font, &error)) { 
    CFStringRef errorDescription = CFErrorCopyDescription(error) 
    NSLog(@"Failed to load font: %@", errorDescription); 
    CFRelease(errorDescription); 
} 
CFRelease(font); 
CFRelease(provider); 

來源:馬科·阿門特的This Blog Article

1

這是可能的。我在github中創建了一個示例swift項目。你必須添加下面的幾行。

var uiFont : UIFont? 
let fontData = data 

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

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

Github project link

enter image description here

相關問題