Подтвердить что ты не робот

Как получить имя шрифта из файла otf или ttf?

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

Имя файла было "ProximaNova-Regular.otf" и загрузить шрифт, который я использовал...

[UIFont fontWithName:@"ProximaNova-Regular" size:20];

Это сработало отлично.

Теперь в этом новом приложении у меня есть три файла шрифтов...

Dude_Willie.otf
Impact
handsean.ttf

Но я не уверен, как их загрузить.

Я пробовал

[UIFont fontWithName:<the file name> size:20];

Но это просто возвращается к использованию Helvetica.

Как узнать, какое имя использовать?

4b9b3361

Ответ 1

Выполните следующие четыре простых шага, чтобы добавить и использовать новый шрифт в приложении для iOS:

  • Добавьте your_new_font.ttf или your_new_font.otf в свой проект Xcode
  • В вашем проекте info.plist добавьте новую запись для your_new_font.ttf или your_new_font.otf в массив UIAppFonts (простой текст для этого - "Шрифты, предоставляемые приложением"). )
  • На этом этапе я рекомендую добавить этот временный фрагмент кода отладки, чтобы сбросить все шрифты, доступные вашему приложению, включая недавно добавленный your_new_font:

//Swift

    for family: String in UIFont.familyNames {
        print("\(family)")
        for names: String in UIFont.fontNames(forFamilyName: family) {
            print("== \(names)")
        }
    }

//Objective-C

for(NSString *fontfamilyname in [UIFont familyNames]) {
    NSLog(@"family:'%@'",fontfamilyname);
    for(NSString *fontName in [UIFont fontNamesForFamilyName:fontfamilyname]) {
        NSLog(@"\tfont:'%@'",fontName);
    }
    NSLog(@"-------------");
}
  • В выходных данных отладки найдите имя вашего нового шрифта 'family' и 'font'. Передайте все, что отображается как "font" имя, соответствующее вашему новому семейству шрифтов (может быть более одного "шрифта", связанного с вашим новым шрифтом "family") в UIFont *myNewFont = [UIFont fontWithName:@"font_name_from_debug_output" size:20], и вы должны быть в бизнесе!

Ответ 2

Щелкните правой кнопкой мыши на TTF → Получить информацию

"Полное имя" - это то, что вы ищете.

Что сработало для меня с TTF.

Edit:

Я только что использовал шрифт с другим именем из "Полное имя" в Get Info.

Для компиляции этого ответа, если быстрая проверка выше не работает, запустите этот код в своем проекте:

for (NSString *fontFamilyName in [UIFont familyNames]) {
    for (NSString *fontName in [UIFont fontNamesForFamilyName:fontFamilyName]) {
        NSLog(@"Family: %@    Font: %@", fontFamilyName, fontName);
    }
}

Ищите правильное имя шрифта, который вы хотите использовать.

Код Swift 3.0:

for fontFamilyName in UIFont.familyNames{
    for fontName in UIFont.fontNames(forFamilyName: fontFamilyName){
        print("Family: \(fontFamilyName)     Font: \(fontName)")
    }
}

Ответ 3

  • Установить шрифт
  • Откройте приложение Font Book на вашем Mac
  • Выберите шрифт и нажмите кнопку "Информация"
  • Имя, которое вы ищете, это имя PostScript
    • MacOS: Просмотр → Показать информацию о шрифте

example

Ответ 4

Чтобы использовать шрифты в iOS, необходимо загрузить шрифт на основе шрифта FULL NAME (PostScript Name), который иногда (и обычно) отличается от фактического имени шрифта FILE NAME.

Представьте, что вы переименовываете файл шрифта в Arial-регулярный .ttf, чтобы "Foo.ttf". Шрифт, содержащийся в файле шрифта, который вы только что переименовали, по-прежнему "Arial-регулярным".

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

Если вы работаете на Mac или Linux, просто запустите этот скрипт из командной строки в каталоге, где у вас есть пользовательские шрифты (используется утилита fc-scan из fontconfig, которая, вероятно, уже установлена, но если нет Вы можете установить его с помощью homebrew: brew install fontconfig):

for file in "$arg"*.{ttf,otf}; do fc-scan --format "%{postscriptname}\n" $file; done

Вот снимок экрана вышеупомянутой команды, выполняющейся в моем каталоге ~/Library/Fonts:

enter image description here

Приведенный выше сценарий будет проходить через все файлы .ttf и .otf в текущем каталоге, а затем распечатывать имя PostScript для каждого шрифта, который можно использовать для ссылки на файл шрифта в XCode или в другом месте.

Если вы хотите получить дополнительную информацию (PostScriptName, Filename) и цветовое кодирование, вы можете запустить этот альтернативный сценарий:

for file in "$arg"*.{ttf,otf}; do 
    postscriptname=$(fc-scan --format "%{postscriptname}\n" $file);
    printf "\033[36m PostScript Name:\033[0m %s \e[90m(%s)\033[0m\n" "$postscriptname" "$file";
done

enter image description here

Это немного быстрее, чем копировать-вставлять код внутри вашего файла AppDelegate.m, чтобы печатать имена каждый раз, когда вы хотите добавить новый файл шрифта, который является популярным методом, и это также быстрее, чем открывать шрифт в FontBook для проверить имя PostScript.

ПОЛЕЗНЫЙ СОВЕТ: Если вы используете псевдоним вышеупомянутого скрипта в своем терминале, так что все, что вам нужно сделать, это набрать одну команду, чтобы получить все имена шрифтов PostScript для всех файлов в текущем каталоге (моя функция называется fontnames поэтому все, что мне нужно сделать, это набрать fontnames в терминале внутри каталога со шрифтами в нем, и имена PostScript будут напечатаны автоматически, тогда вы сэкономите время в своем рабочем процессе разработки и получите этот удобный скрипт, готовый к использованию, когда вы нужно это.

Надеюсь это поможет!

Ответ 5

Вы хотите знать, как получить имя для этого: -

  NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]];

  for (NSInteger indFamily=0; indFamily<[familyNames count]; ++indFamily) 
  {
        NSLog(@"Family name: %@", [familyNames objectAtIndex:indFamily]);

        NSArray *fontNames = [[NSArray alloc] initWithArray:
              [UIFont fontNamesForFamilyName:[familyNames objectAtIndex:indFamily]]];

        for (NSInteger indFont=0; indFont<[fontNames count]; ++indFont) 
        {
              NSLog(@"    Font name: %@", [fontNames objectAtIndex:indFont]);
        }
  }

надеюсь, что это поможет вам...

Ответ 6

Swift 3.0

for familyName in UIFont.familyNames {
        for fontName in UIFont.fontNames(forFamilyName: familyName ) {
            print("\(familyName) : \(fontName)")
        }
    }

Ответ 7

Swift 4. 0+ решение

    for fontFamilyName in UIFont.familyNames {
        print("family: \(fontFamilyName)\n")

        for fontName in UIFont.fontNames(forFamilyName: fontFamilyName) {
            print("font: \(fontName)")
        }
    }

Будет выводить:

семья: Apple SD Готика Нео

font: AppleSDGothicNeo-Thin

font: AppleSDGothicNeo-Light

Ответ 8

После того, как вы добавили свои шрифты в свой проект/приложение, добавьте этот код (возможно, только в приложение delegate didFinishLaunchingWithOptions), чтобы распечатать все доступные шрифты для вашего приложения. Из списка "В" в этом списке вы сможете определить шрифт, который вам нужен. Не забудьте удалить ненужный код после.

for (NSString *fontFamilyName in [UIFont familyNames]) {
    for (NSString *fontName in [UIFont fontNamesForFamilyName:fontFamilyName]) {
        NSLog(@"Family: %@    Font: %@", fontFamilyName, fontName);
    }
}

Ответ 9

Если вы хотите программно найти имя шрифта для данного файла шрифта:

import Foundation

func loadFontName(for file: URL) throws -> String {
    let data = try Data(contentsOf: file)

    guard let provider = CGDataProvider(data: data as CFData) else {
        throw Error("Could not create data provider")
    }

    guard let font = CGFont(provider) else {
        throw Error("Could not load font")
    }

    guard let name = font.postScriptName else {
        throw Error("Could not get font name from font file")
    }

    return name as String
}

Замените ваши собственные бросаемые Error объекты по мере необходимости.

Ответ 10

Вы также можете использовать otfinfo --info arial.ttf, чтобы получить имя из командной строки. Имя postscript - это тот, который вам нужно передать в конструктор UIFont.

Ответ 11

Swift 1.2:

    for familyName in UIFont.familyNames() {
        for fontName in UIFont.fontNamesForFamilyName(familyName as! String) {
            println("\(familyName) : \(fontName)")
        }
    }

Ответ 12

Записать имя_файла имени файла шрифта и затем получить доступ к шрифтам:

// You can log all font family names suing **fontNamesForFamilyName**

NSLog(@" font name %@", [UIFont fontNamesForFamilyName:@"the file name"]);

Надеюсь, это поможет вам.

Ответ 13

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

<customFonts key="customFonts">
    <array key="Linotype - AvenirNextLTPro-Bold.otf">
        <string>AvenirNextLTPro-Bold</string>
    </array>
    <array key="Linotype - AvenirNextLTPro-Regular.otf">
        <string>AvenirNextLTPro-Regular</string>
    </array>
    <array key="TradeGothicLTPro-BdCn20.otf">
        <string>TradeGothicLTPro-BdCn20</string>
    </array>
</customFonts>

Ответ 14

Перечислите имена и семейства шрифтов для macOS с помощью Swift 4.1:

NSFontManager.shared.availableFonts.map { print($0) }
NSFontManager.shared.availableFontFamilies.map { print($0) }

Ответ 15

Swift 4.0 поддерживается

Это всего лишь один строчный код для печати всего семейства шрифтов и имен шрифтов

override func viewDidLoad() {
    super.viewDidLoad()
    //Main line of code
    UIFont.familyNames.sorted().forEach({ print($0); UIFont.fontNames(forFamilyName: $0 as String).forEach({print($0)})})
}