В этом приложении мы распаковываем файл, который содержит папку Fonts. Внутри этой папки у нас есть собственный шрифт в формате ttf. Затем мы отображаем этот пользовательский шрифт в ярлыках и кнопках, и он работает должным образом, за исключением BOLD. Действительно, жирный шрифт заменяется стандартным шрифтом.
Это код для загрузки шрифта:
- (UIFont*)loadFont:(NSString *)withName :(int)systemIndex :(CGFloat)size :(UIFont*) dftFont
{
if ([self isAppleFont:withName]) {
return [UIFont fontWithName:withName size:size];
}
if ([fontsDictionary objectForKey:withName]) {
return [fontsDictionary objectForKey:withName];
}
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString* myString = [NSString stringWithFormat:@"%@.ttf", withName];
NSString* fontsFolderPath = [SystemsManager fontsFolderForSystemIndex:systemIndex];
NSString* completeFontName = [NSString stringWithFormat:@"%@/%@", fontsFolderPath,myString];
if ([fileManager fileExistsAtPath:fontsFolderPath] && [fileManager fileExistsAtPath:completeFontName]) {
NSData *data = [NSData dataWithContentsOfFile:completeFontName];
CFErrorRef error;
CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)data);
CGFontRef font = CGFontCreateWithDataProvider(provider);
if(!CTFontManagerRegisterGraphicsFont(font, &error)){
CFStringRef errorDescription = CFErrorCopyDescription(error);
NSLog(@"Failed to load font: %@", errorDescription);
}
CTFontRef ctFont = CTFontCreateWithGraphicsFont(font, size, NULL, NULL);
//CTFontRef ctFont = CTFontCreateWithGraphicsFont(font, 0, NULL, NULL);
UIFont *uiFont = CFBridgingRelease(ctFont);
[fontsDictionary setObject:uiFont forKey:withName];
return uiFont;
} else {
return dftFont;
}
И, наконец, код, который устанавливает жирный шрифт.
-(void)setLabel:(NSString*)bold :(NSString*)italic :(UILabel*)label :(CGFloat*)withSize {
BOOL isBold = ![bold isEqualToString:@"REGULAR"];
BOOL isItalic = ![italic isEqualToString:@"NonItalic"];
UIFontDescriptor * fontBold = [label.font.fontDescriptor
fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold];
UIFontDescriptor * fontItalic = [label.font.fontDescriptor
fontDescriptorWithSymbolicTraits: UIFontDescriptorTraitItalic];
UIFontDescriptor * fontBoldItalic = [label.font.fontDescriptor
fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold
| UIFontDescriptorTraitItalic];
if ( isBold && isItalic )
{
label.font = [UIFont fontWithDescriptor:fontBoldItalic size:0];
}
if (isBold && !isItalic )
{
label.font = [UIFont fontWithDescriptor:fontBold size:0];
}
if (isItalic)
{
label.font = [UIFont fontWithDescriptor:fontItalic size:0];
}
label.font = [label.font fontWithSize:*withSize];
}
Я сделал что-то не так или, может быть, невозможно отобразить BOLD для пользовательских шрифтов?
С уважением.