Могу ли я встроить пользовательский шрифт в приложение для iPhone? - PullRequest
768 голосов
/ 11 декабря 2008

Я бы хотел, чтобы приложение включало пользовательский шрифт для рендеринга текста, загружал его, а затем использовал его со стандартными UIKit элементами, такими как UILabel. Это возможно?

Ответы [ 32 ]

5 голосов
/ 26 сентября 2012

Сначала добавьте шрифт в формате .odt к вашим ресурсам, в этом случае мы будем использовать DINEngschriftStd.otf, а затем этот код для назначения шрифта метке

[theUILabel setFont:[UIFont fontWithName:@"DINEngschriftStd" size:21]];

Чтобы убедиться, что ваш шрифт загружен в проект, просто наберите

NSLog(@"Available Font Families: %@", [UIFont familyNames]);

В .plist вы должны объявить шрифт. Просто добавьте запись «Шрифты, предоставляемые приложением» и добавьте строку элемента 0 с именем шрифта (DINEngschriftStd.otf)

5 голосов
/ 03 сентября 2012

Я советовал некоторые советы на этой странице с тем, что работает для меня в iOS 5.

Во-первых, вы должны добавить собственный шрифт в ваш проект. Затем вам нужно следовать совету @iPhoneDev и добавить шрифт в ваш файл info.plist.

После того, как вы это сделаете, это работает:

UIFont *yourCustomFont = [UIFont fontWithName:@"YOUR-CUSTOM-FONT-POSTSCRIPT-NAME" size:14.0];
[yourUILabel setFont:yourCustomFont];

Однако вам необходимо знать название вашего шрифта Postscript. Просто следуйте советам @Daniel Wood и нажимайте command-i, пока находитесь в FontBook.

Тогда наслаждайтесь вашим собственным шрифтом.

5 голосов
/ 29 декабря 2011

Для iOS 3.2 и выше: Используйте методы, предоставленные несколькими выше, а именно:

  1. Добавьте файл шрифта (например, Chalkduster.ttf ) в папку ресурсов проекта в XCode.
  2. Откройте info.plist и добавьте новый ключ с именем UIAppFonts. Тип этого ключа должен быть массивом.
  3. Добавьте свое имя шрифта в этот массив, включая расширение (" Chalkduster.ttf ").
  4. Используйте [UIFont fontWithName:@"Real Font Name" size:16] в своем приложении.

НО «Настоящее имя шрифта» - это не всегда то, что вы видите в Fontbook. Лучший способ - спросить ваше устройство, какие шрифты оно видит и каковы точные названия.

Я использую uifont-name-grabber, размещенный по адресу: UIFont-имя-граббер

Просто перетащите нужные шрифты в проект xcode, добавьте имя файла в plist и запустите его на устройстве, для которого вы создаете, он отправит вам полный список шрифтов с именами, которые UIFont fontWithName: ожидает.

3 голосов
/ 29 октября 2015

Swift, кодовый способ: (работает также со Swift 2.0)

Добавьте необходимые шрифты в свой проект (как добавление изображений, просто перетащите в Xcode), убедитесь, что они нацелены на ваш проект
добавьте этот метод и загрузите пользовательские шрифты (рекомендуется в appDelegate didFinishLaunchingWithOptions)

func loadFont(filePath: String) {

    let fontData = NSData(contentsOfFile: filePath)!

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

    var error: Unmanaged<CFError>?
    if !CTFontManagerRegisterGraphicsFont(cgFont, &error) {
        let errorDescription: CFStringRef = CFErrorCopyDescription(error!.takeUnretainedValue())
        print("Unable to load font: %@", errorDescription, terminator: "")
    }

}

Пример использования:

if let fontPath = NSBundle.mainBundle().pathForResource("My-Font", ofType: "ttf"){
      loadFont(fontPath)
}

Используйте шрифт:

UIFont(name: "My-Font", size: 16.5)
3 голосов
/ 20 марта 2013

Существует новый способ использования пользовательских шрифтов, начиная с iOS 4.1. Он позволяет загружать шрифты динамически, будь то файлы из приложения, загруженные данные или что-то еще. Он также позволяет загружать шрифты по мере необходимости, тогда как старый метод загружает их все во время запуска приложения, что может занять слишком много времени, если у вас много шрифтов.

Новый метод описан в ios-dynamic-font-loading

Вы используете функцию CTFontManagerRegisterGraphicsFont, предоставляя ей буфер с данными вашего шрифта. Затем он доступен для UIFont и веб-просмотров, как и при старом методе. Вот пример кода по этой ссылке:

NSData *inData = /* 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);
2 голосов
/ 23 октября 2012

Вы можете добавить необходимые файлы «FONT» в папку ресурсов. Затем перейдите в файл Project Info.plist и используйте КЛЮЧ «Шрифты, предоставляемые приложением» и укажите значение «ИМЯ ШРИФТА».

Тогда вы можете вызвать метод [UIFont fontwithName:@"FONT NAME" size:12];

1 голос
/ 26 марта 2014

да, вы можете использовать собственный шрифт в вашем приложении

пошагово следуйте туда:

Добавьте ваши файлы пользовательских шрифтов в ваш проект во вспомогательных файлах

Добавьте ключ в файл Info.plist с именем UIAppFonts.

Сделать этот ключ массивом

Для каждого имеющегося шрифта введите полное имя файла шрифта (включая расширение) в качестве элементов в массив UIAppFonts

Сохранить Info.plist Теперь в вашем приложении вы можете просто вызвать [UIFont fontWithName: @ "ваше имя произвольного шрифта" размер: 20], чтобы получить собственный шрифт для использования с вашими UILabels после применения этого, если вы не получаете правильный шрифт, вы дважды щелкаете по пользовательскому шрифту и внимательно видите, что имя шрифта верхней стороны подходит, и скопируйте этот шрифт, вставьте сюда [UIFont fontWithName: @ "здесь после вашего имени пользовательского шрифта": 20]

надеюсь, вы получите правильный ответ

1 голос
/ 11 декабря 2013

да, вы можете использовать собственный шрифт в вашем приложении

пошагово следуйте туда:

  • Добавьте ваши файлы пользовательских шрифтов в ваш проект во вспомогательных файлах
  • Добавьте ключ к вашему Info.plist файлу с именем UIAppFonts.
  • Сделать этот ключ массивом
  • Для каждого имеющегося шрифта введите полное имя файла шрифта (включая расширение) в качестве элементов в массив UIAppFonts
  • Сохранить Info.plist Теперь в вашем приложении вы можете просто позвонить [UIFont fontWithName:@"your Custom font Name" size:20], чтобы получить пользовательский шрифт для использования с UILabels

после применения, если вы не получаете правильный шрифт затем вы дважды щелкаете по пользовательскому шрифту и внимательно видите название шрифта верхней стороны. и скопируйте этот шрифт, вставьте сюда [UIFont fontWithName:@" here past your Custom font Name" size:20] я надеюсь, что вы получите правильный ответ

1 голос
/ 11 мая 2013

Хотя некоторые из приведенных выше ответов верны, я написал подробное наглядное пособие для людей, у которых все еще есть проблемы со шрифтами.

Решения выше, которые говорят вам добавить шрифт к списку и использовать

[self.labelOutlet setFont:[UIFont fontWithName:@"Sathu" size:10]];

правильные. Пожалуйста, используйте любой другой хакерский способ. Если вы все еще сталкиваетесь с проблемами при поиске имен шрифтов и их добавлении, вот учебник -

Использование пользовательских шрифтов в приложении ios

1 голос
/ 28 января 2013

Я сделал все возможное, но новые шрифты не появляются, поэтому я нашел решение:

При перетаскивании файлов fot (otf или ttf) НЕ забудьте установить флажок «Добавить к целям».

После этого ваш шрифт появится, и все будет работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...