2 Stimmen

Suche nach einer Schriftart anhand bestimmter Merkmale in OSX

Gibt es einen Ersatz für die Windows-Funktion CreateFont(..) Funktion in OSX?

Ich habe versucht, die NSFontDescriptor und seine matchingFontDescriptorsWithMandatoryKeys: Methode, aber diese Methode findet nicht die "nächstgelegene" Schriftart, sondern die übereinstimmenden Merkmale und kann auch nil .

Gibt es eine Möglichkeit, die nächstgelegene Schriftart anhand bestimmter Merkmale zu finden (z. B. ein CreateFont ) in OSX?

AKTUALISIERT

Etwas Seltsames passiert mit NSFontDescriptor

Ich habe zwei Teile des Codes:

über Kakao:

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];

Und mit 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);

Ich habe in beiden Fällen dieselben Schriftartdeskriptoren erstellt, aber im ersten Fall matchedDescriptors es nil und mit CoreText API gibt es einige Schriftarten in matchedDescriptors . Ist es ein Fehler?

Aber im Allgemeinen, wenn ich die nil a XXXMatchingFontDescriptorsXXX als obligatorisches Attribut, sollte es mindestens einen Deskriptor zurückgeben?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X