Как настроить пользовательский шрифт
Чтобы использовать пользовательский шрифт (не включенный в iOS), вы должны отредактировать файл <appname>-Info.plist
и создать новый ключ UIAppFonts
с массивом типов, где каждыйЭлементом массива является String с именем вашего шрифтового файла.Пример: VAGRoundedStd-Light.ttf
.Вы также должны добавить файл в свой проект.
![UIAppFonts](https://i.stack.imgur.com/5HLiQ.png)
Примечание. При вводе UIAppFonts
и нажатии клавиши ввода ключ преобразуется в «Шрифты, предоставленныеapplication ".
Однако, когда вы используете шрифт в Интерфейсном Разработчике (или с UIFont
), вы не используете имя файла шрифта, а имя, которое появляется при открытии шрифтав приложении Шрифт Book вашего Mac.Для предыдущего примера это будет VAG Rounded Std Light
.
![Font Book](https://i.stack.imgur.com/aFQ9B.png)
OS X более устойчива, чем iOS, переваривающая форматы TrueType, поэтому в редких случаях вы можете найти шрифт, который работает в OS X, но не в iOS.Если это произойдет, замените шрифт, чтобы проверить, правильно ли вы выполнили процесс.
Как программно загрузить шрифт
Это решает ситуацию, когда лицензия на шрифт требует от вас распространения шрифта.зашифрованы.
- Первым шагом является шифрование и дешифрование шрифта любым алгоритмом, который вы считаете подходящим.
- Загрузить шрифт как объект NSData и отменить шифрование.
- Зарегистрируйте шрифт программно.
Этот следующий рецепт из Динамическая загрузка шрифтов iOS от Marco Arment.Это делает шрифты доступными в UIFont и UIWebView.Тот же код можно использовать для загрузки шрифтов из Интернета.
NSData *inData = /* your decrypted 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);
Как загрузить более двух шрифтов одного семейства
Это тот случай, когда iOS отказывается загружать больше, чемдва шрифта из одного семейства.
Вот обходной путь кода от пользователя stackoverflow Evadne Wu .Просто вставьте следующее в ваш делегат приложения (обратите внимание, что оно использует две платформы):
#import <CoreText/CoreText.h>
#import <MobileCoreServices/MobileCoreServices.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
CTFontManagerRegisterFontsForURLs((__bridge CFArrayRef)((^{
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *resourceURL = [[NSBundle mainBundle] resourceURL];
NSArray *resourceURLs = [fileManager contentsOfDirectoryAtURL:resourceURL includingPropertiesForKeys:nil options:0 error:nil];
return [resourceURLs filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(NSURL *url, NSDictionary *bindings) {
CFStringRef pathExtension = (__bridge CFStringRef)[url pathExtension];
NSArray *allIdentifiers = (__bridge_transfer NSArray *)UTTypeCreateAllIdentifiersForTag(kUTTagClassFilenameExtension, pathExtension, CFSTR("public.font"));
if (![allIdentifiers count]) {
return NO;
}
CFStringRef utType = (__bridge CFStringRef)[allIdentifiers lastObject];
return (!CFStringHasPrefix(utType, CFSTR("dyn.")) && UTTypeConformsTo(utType, CFSTR("public.font")));
}]];
})()), kCTFontManagerScopeProcess, nil);
return YES;
}
Доступно как gist .Комментарий в блоге автора: Загрузка 2+ шрифтов на iOS из того же семейства шрифтов .
Альтернативный, более сложный обходной путь от pixeldock.com :
Если вы добавите более двух вариантов шрифта одного и того же семейства шрифтов (например, «Нормальный», «Полужирный» и «Расширенный»), только последние два варианта шрифта, добавленные в проект, будутбыть пригодным для использования.
Если вы видите, что это происходит, это ограничение вашей версии SDK, и единственным выходом из этого является редактирование семейства шрифтов с помощью редактора шрифтов, такого как Fontforge.Снова, с pixeldock.com :
- Откройте ваш шрифт в Fontforge
- Перейдите в «Элемент» -> «Информация о шрифте» и измените «Фамилия»поле
- Перейдите к «Элемент» -> «Имена TTF» и измените поля «Семейство» и «Предпочитаемое семейство»
- Перейдите в «Файл» -> «Создать шрифты» и сохраните отредактированный шрифт.