Ответ 1
Как настроить пользовательский шрифт
Чтобы использовать пользовательский шрифт (один из них не включен в iOS), вы должны отредактировать свой файл <appname>-Info.plist
и создать новый UIAppFonts
ключ с массивом типов, где каждый элемент массива - это строка с именем вашего файл шрифта. Пример: VAGRoundedStd-Light.ttf
. Вы также должны добавить файл в свой проект.
Примечание. Когда вы набираете UIAppFonts
и нажимаете клавишу ввода, ключ преобразуется в "Шрифты, предоставляемые приложением".
Однако, когда вы используете шрифт в Interface Builder (или с UIFont
), вы не используете имя шрифта, а имя, которое появляется при открытии шрифта в приложении Font Book вашего Mac. Для предыдущего примера это будет VAG Rounded Std Light
.
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
- Goto 'Element → ' Font Info и измените поле "Фамилия"
- Goto 'Element → ' TTF Имена и изменение полей "Семья" и "Предпочтительное семейство"
- Перейти к "Файл → " Сгенерировать шрифты и сохранить отредактированный шрифт