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

Я также зациклился на семействе шрифтов, чтобы убедиться, что он был установлен и не имеет успеха.

Является ли то, чего я пытаюсь достичь, даже возможно? Если да, то что я делаю неправильно?

ответ

3

Это возможно. Я создал пример проекта в github. Вы должны просто добавить строку ниже.

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

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) 
} 
Смежные вопросы