Я использовал собственный шрифт в своем предыдущем приложении.
Имя файла было «ProximaNova-Regular.otf», и чтобы загрузить шрифт, который я только что использовал ...
[UIFont fontWithName:@"ProximaNova-Regular" size:20];
Это сработало отлично.
Теперь в этом новом приложении у меня есть три файла шрифтов ...
Dude_Willie.otf
Impact
handsean.ttf
Но я не знаю, как их загрузить.
я пытался
[UIFont fontWithName:<the file name> size:20];
Но это просто возвращается к использованию Helvetica.
Как я могу узнать, какое имя использовать?
familyNames
фактически не отображались шрифты, которые я искал.fc-scan --format "%{foundry}: %{family}\n" filename.ttf
илиfilename.otf
.Ответы:
Выполните следующие четыре простых шага, чтобы добавить и использовать новый шрифт в приложении iOS:
UIAppFonts
массив (простой текст для этого - «Шрифты, предоставленные приложением»)// Swift
for family: String in UIFont.familyNames { print("\(family)") for names: String in UIFont.fontNames(forFamilyName: family) { print("== \(names)") } }
// Objective-c
UIFont *myNewFont = [UIFont fontWithName:@"font_name_from_debug_output" size:20]
и вы должны быть в бизнесе!источник
Щелкните правой кнопкой мыши TTF -> Получить информацию
«Полное имя» - это то, что вы ищете.
Вот что у меня сработало с TTF.
Редактировать:
Я просто использовал шрифт, имя которого отличалось от «Полного имени» в 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)") } }
источник
источник
Чтобы использовать шрифты в iOS, вы должны загрузить шрифт на основе ПОЛНОГО ИМЯ шрифта (имени PostScript), которое иногда (и обычно отличается) от фактического ИМЯ ФАЙЛА шрифта .
Есть несколько хороших программных способов получить имя шрифта уже в этом потоке, но у меня есть другой подход, использующий командную строку.
Если у вас 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
каталоге:Сценарий выше будет проходить через все
.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
Это немного быстрее, чем копирование и вставка кода внутри вашего файла AppDelegate.m, чтобы распечатывать имена каждый раз, когда вы хотите добавить новый файл шрифта, что является популярным методом, а также быстрее, чем открывать шрифт в FontBook для проверьте имя PostScript.
ПОЛЕЗНЫЙ СОВЕТ: если вы используете псевдоним вышеуказанного сценария в своем терминале, все, что вам нужно сделать, это ввести одну команду, чтобы получить все имена шрифтов PostScript для всех файлов в текущем каталоге (моя функция называется,
fontnames
поэтому все, что мне нужно сделать введитеfontnames
на терминале внутри каталога со шрифтами в нем, и имена PostScript будут напечатаны автоматически, тогда вы сэкономите время в рабочем процессе разработки и получите этот удобный сценарий, готовый к использованию, когда он вам понадобится.Надеюсь это поможет!
источник
fc-scan
утилита. Что происходит при запускеfc-scan -V
на терминале?brew install fontconfig
.Вы хотите знать, как получить имя для этого: -
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]); } }
надеюсь, это поможет вам ...
источник
Если вы хотите программно найти имя шрифта для данного файла шрифта:
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
предметами.источник
Swift 3.0
for familyName in UIFont.familyNames { for fontName in UIFont.fontNames(forFamilyName: familyName ) { print("\(familyName) : \(fontName)") } }
источник
Решение Swift 4.0+
for fontFamilyName in UIFont.familyNames { print("family: \(fontFamilyName)\n") for fontName in UIFont.fontNames(forFamilyName: fontFamilyName) { print("font: \(fontName)") } }
Выведет:
источник
После того, как вы добавили свои шрифты в свой проект / приложение, добавьте этот код (возможно, только в методе делегата приложения didFinishLaunchingWithOptions), чтобы распечатать все доступные шрифты для вашего приложения. Из этого списка вы сможете определить шрифт, который вам нужен. Не забудьте после этого удалить ненужный код.
for (NSString *fontFamilyName in [UIFont familyNames]) { for (NSString *fontName in [UIFont fontNamesForFamilyName:fontFamilyName]) { NSLog(@"Family: %@ Font: %@", fontFamilyName, fontName); } }
источник
Вы также можете использовать otfinfo --info arial.ttf, чтобы получить имя из командной строки. Имя postscript - это то, что вам нужно передать конструктору UIFont.
источник
Swift 1.2:
for familyName in UIFont.familyNames() { for fontName in UIFont.fontNamesForFamilyName(familyName as! String) { println("\(familyName) : \(fontName)") } }
источник
Еще один «быстрый, практичный» прием, который не включает сканирование всех шрифтов по умолчанию, существующих в эмуляторе или устройстве, - это использовать шрифт для чего-то в вашем
storyboard
. Затем, если вы редактируете раскадровку с помощью текстового редактора (открытого какsource code
), вы можете увидеть шрифты, используемые с «внутренними» именами, если вы выполните поиск по тегу «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>
источник
Зарегистрируйте familyNames файла шрифта, а затем получите доступ к шрифтам:
// You can log all font family names suing **fontNamesForFamilyName** NSLog(@" font name %@", [UIFont fontNamesForFamilyName:@"the file name"]);
Надеюсь, это поможет тебе.
источник
Список названий и семейств шрифтов для macOS с Swift 4.1 :
NSFontManager.shared.availableFonts.map { print($0) } NSFontManager.shared.availableFontFamilies.map { print($0) }
источник
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)})}) }
источник