Есть ли какая-нибудь замена для функции Windows CreateFont(..)
в OSX?
Я пытался использовать NSFontDescriptor
и метод matchingFontDescriptorsWithMandatoryKeys:
, но этот метод не находит «ближайший» шрифтон находит совпадающие характеристики, а также может возвращать nil
.
Есть ли способ найти ближайший шрифт по заданным характеристикам (например, CreateFont ) в OSX?
ОБНОВЛЕНО
Что-то странное происходит с NSFontDescriptor ..
У меня есть два фрагмента кода:
на Какао:
NSDictionary* fontTraits = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:NSFontSansSerifClass], NSFontSymbolicTrait,
[NSNumber numberWithFloat:0.4], NSFontWidthTrait,
nil];
NSDictionary* fontAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
fontTraits, NSFontTraitsAttribute,
nil];
NSFontDescriptor* fontDescriptor = [NSFontDescriptor fontDescriptorWithFontAttributes:fontAttributes];
NSArray* matchedDescriptors = [fontDescriptor matchingFontDescriptorsWithMandatoryKeys:nil];
И использованиеCoreText API:
CFMutableDictionaryRef fontTraits = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
float weight = 0.4;
CFNumberRef fontWeight = CFNumberCreate(kCFAllocatorDefault, kCFNumberFloat32Type, &weight);
CFDictionaryAddValue(fontTraits, kCTFontWeightTrait, fontWeight);
int symbolicTraits = kCTFontSansSerifClass;
CFNumberRef fontSymbolicTraits = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &symbolicTraits);
CFDictionaryAddValue(fontTraits, kCTFontSymbolicTrait, fontSymbolicTraits);
CFMutableDictionaryRef fontAttributes = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
CFDictionaryAddValue(fontAttributes, kCTFontTraitsAttribute, fontTraits);
CTFontDescriptorRef fontDescriptor = CTFontDescriptorCreateWithAttributes(fontAttributes);
CFArrayRef matchedDescriptors = CTFontDescriptorCreateMatchingFontDescriptors(fontDescriptor, 0);
Я создал одинаковые дескрипторы шрифтов в обоих случаях, но в первом случае matchedDescriptors
равен nil
, а в CoreText API есть некоторые шрифты в matchedDescriptors
.Это ошибка?
Но в целом, если я передам nil
в XXXMatchingFontDescriptorsXXX
в качестве обязательного атрибута, должен ли он вернуть хотя бы один дескриптор?