所以,我一直在研究我的字体,结果我需要一种方法来打印出特定字体的所有 UIFontDescriptorSymbolicTraits
。现在设置的方式是,您只能猜测字体可能具有的 21 种符号特征中的哪一种,以确定字体是否支持 UIFontDescriptorTraitExpanded
之类的东西,似乎没有这是一种直接的方式来做一些事情,我插入一个字体名称,然后神奇地 UIFontDescriptorSymbolicTraits
出现在调试器中。现在我可以查询它的字体,它确实返回了“枚举”数值,但这似乎是 Apple 可能已经提供给我们使用的东西,但我遇到了死胡同。我只能得到枚举数值,没有别的。我正在使用下面的这种方法一个一个地找到这些特征,这很烦人:
UIFontDescriptor *helveticaNeueFamily = [UIFontDescriptor fontDescriptorWithFontAttributes: @{UIFontDescriptorFamilyAttribute: @"Helvetica"}];
helveticaNeueFamily=[helveticaNeueFamily fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitExpanded];
NSArray *matches = reallyMatchingFontDescriptorsWithMandatoryKeys(helveticaNeueFamily, nil);
如有任何帮助,我们将不胜感激。谢谢!
最佳答案
这是我的做法,这是很多代码,但没关系,工作已经完成:
main方法,比如你要查看所有的符号描述符,就是这样:
NSArray *fontFamilies = [UIFont familyNames];
for (int i = 0; i < [fontFamilies count]; i++) {
NSString *fontFamily = [fontFamilies objectAtIndex:i];
NSArray *fontNames = [UIFont fontNamesForFamilyName:[fontFamilies objectAtIndex:i]];
NSLog (@"%@: %@", fontFamily, fontNames);
[self findFontDescriptors:fontFamily size:14];
}
方法,这个和上面的方法一起工作,返回你要找的东西。您可以通过使用下面的方法然后插入字体名称和大小来使用它,但是上面的循环显示了所有系统字体的所有内容:
-(void)findFontDescriptors:(NSString*)fontName size:(float)size {
if ([self isUIFontDescriptorTraitItalic:fontName size:size]) {
NSLog(@"UIFontDescriptorTraitItalic");
}
if ([self isUIFontDescriptorTraitBold:fontName size:size]) {
NSLog(@"UIFontDescriptorTraitBold");
}
if ([self isUIFontDescriptorTraitExpanded:fontName size:size]) {
NSLog(@"UIFontDescriptorTraitExpanded");
}
if ([self isUIFontDescriptorTraitCondensed:fontName size:size]) {
NSLog(@"UIFontDescriptorTraitCondensed");
}
if ([self isUIFontDescriptorTraitMonoSpace:fontName size:size]) {
NSLog(@"UIFontDescriptorTraitMonoSpace");
}
if ([self isUIFontDescriptorTraitVertical:fontName size:size]) {
NSLog(@"UIFontDescriptorTraitVertical");
}
if ([self isUIFontDescriptorTraitUIOptimized:fontName size:size]) {
NSLog(@"UIFontDescriptorTraitUIOptimized");
}
if ([self isUIFontDescriptorTraitTightLeading:fontName size:size]) {
NSLog(@"UIFontDescriptorTraitTightLeading");
}
if ([self isUIFontDescriptorTraitLooseLeading:fontName size:size]) {
NSLog(@"UIFontDescriptorTraitLooseLeading");
}
if ([self isUIFontDescriptorClassMask:fontName size:size]) {
NSLog(@"UIFontDescriptorClassMask");
}
if ([self isUIFontDescriptorClassUnknown:fontName size:size]) {
NSLog(@"UIFontDescriptorClassUnknown");
}
if ([self isUIFontDescriptorClassOldStyleSerifs:fontName size:size]) {
NSLog(@"UIFontDescriptorClassOldStyleSerifs");
}
if ([self isUIFontDescriptorClassTransitionalSerifs:fontName size:size]) {
NSLog(@"UIFontDescriptorClassTransitionalSerifs");
}
if ([self isUIFontDescriptorClassModernSerifs:fontName size:size]) {
NSLog(@"UIFontDescriptorClassModernSerifs");
}
if ([self isUIFontDescriptorClassClarendonSerifs:fontName size:size]) {
NSLog(@"UIFontDescriptorClassClarendonSerifs");
}
if ([self isUIFontDescriptorClassSlabSerifs:fontName size:size]) {
NSLog(@"UIFontDescriptorClassSlabSerifs");
}
if ([self isUIFontDescriptorClassFreeformSerifs:fontName size:size]) {
NSLog(@"UIFontDescriptorClassFreeformSerifs");
}
if ([self isUIFontDescriptorClassSansSerif:fontName size:size]) {
NSLog(@"UIFontDescriptorClassSansSerif");
}
if ([self isUIFontDescriptorClassOrnamentals:fontName size:size]) {
NSLog(@"UIFontDescriptorClassOrnamentals");
}
if ([self isUIFontDescriptorClassScripts:fontName size:size]) {
NSLog(@"UIFontDescriptorClassScripts");
}
if ([self isUIFontDescriptorClassSymbolic:fontName size:size]) {
NSLog(@"UIFontDescriptorClassSymbolic");
}
}
- (BOOL)isUIFontDescriptorTraitBold:(NSString*)fontName size:(float)size {
UIFont* fonts = [UIFont fontWithName:fontName size:size];
UIFontDescriptorSymbolicTraits symTraits = fonts.fontDescriptor.symbolicTraits;
return (symTraits & UIFontDescriptorTraitBold) != 0;
}
- (BOOL)isUIFontDescriptorTraitItalic:(NSString*)fontName size:(float)size {
UIFont* fonts = [UIFont fontWithName:fontName size:size];
UIFontDescriptorSymbolicTraits symTraits = fonts.fontDescriptor.symbolicTraits;
return (symTraits & UIFontDescriptorTraitItalic) != 0;
}
- (BOOL)isUIFontDescriptorTraitExpanded:(NSString*)fontName size:(float)size {
UIFont* fonts = [UIFont fontWithName:fontName size:size];
UIFontDescriptorSymbolicTraits symTraits = fonts.fontDescriptor.symbolicTraits;
return (symTraits & UIFontDescriptorTraitExpanded) != 0;
}
- (BOOL)isUIFontDescriptorTraitCondensed:(NSString*)fontName size:(float)size {
UIFont* fonts = [UIFont fontWithName:fontName size:size];
UIFontDescriptorSymbolicTraits symTraits = fonts.fontDescriptor.symbolicTraits;
return (symTraits & UIFontDescriptorTraitBold) != 0;
}
- (BOOL)isUIFontDescriptorTraitMonoSpace:(NSString*)fontName size:(float)size {
UIFont* fonts = [UIFont fontWithName:fontName size:size];
UIFontDescriptorSymbolicTraits symTraits = fonts.fontDescriptor.symbolicTraits;
return (symTraits & UIFontDescriptorTraitMonoSpace) != 0;
}
- (BOOL)isUIFontDescriptorTraitVertical:(NSString*)fontName size:(float)size {
UIFont* fonts = [UIFont fontWithName:fontName size:size];
UIFontDescriptorSymbolicTraits symTraits = fonts.fontDescriptor.symbolicTraits;
return (symTraits & UIFontDescriptorTraitVertical) != 0;
}
- (BOOL)isUIFontDescriptorTraitUIOptimized:(NSString*)fontName size:(float)size {
UIFont* fonts = [UIFont fontWithName:fontName size:size];
UIFontDescriptorSymbolicTraits symTraits = fonts.fontDescriptor.symbolicTraits;
return (symTraits & UIFontDescriptorTraitUIOptimized) != 0;
}
- (BOOL)isUIFontDescriptorTraitTightLeading:(NSString*)fontName size:(float)size {
UIFont* fonts = [UIFont fontWithName:fontName size:size];
UIFontDescriptorSymbolicTraits symTraits = fonts.fontDescriptor.symbolicTraits;
return (symTraits & UIFontDescriptorTraitBold) != 0;
}
- (BOOL)isUIFontDescriptorTraitLooseLeading:(NSString*)fontName size:(float)size {
UIFont* fonts = [UIFont fontWithName:fontName size:size];
UIFontDescriptorSymbolicTraits symTraits = fonts.fontDescriptor.symbolicTraits;
return (symTraits & UIFontDescriptorTraitLooseLeading) != 0;
}
- (BOOL)isUIFontDescriptorClassMask:(NSString*)fontName size:(float)size {
UIFont* fonts = [UIFont fontWithName:fontName size:size];
UIFontDescriptorSymbolicTraits symTraits = fonts.fontDescriptor.symbolicTraits;
return (symTraits & UIFontDescriptorClassMask) != 0;
}
- (BOOL)isUIFontDescriptorClassUnknown:(NSString*)fontName size:(float)size {
UIFont* fonts = [UIFont fontWithName:fontName size:size];
UIFontDescriptorSymbolicTraits symTraits = fonts.fontDescriptor.symbolicTraits;
return (symTraits & UIFontDescriptorClassUnknown) != 0;
}
- (BOOL)isUIFontDescriptorClassOldStyleSerifs:(NSString*)fontName size:(float)size {
UIFont* fonts = [UIFont fontWithName:fontName size:size];
UIFontDescriptorSymbolicTraits symTraits = fonts.fontDescriptor.symbolicTraits;
return (symTraits & UIFontDescriptorClassOldStyleSerifs) != 0;
}
- (BOOL)isUIFontDescriptorClassTransitionalSerifs:(NSString*)fontName size:(float)size {
UIFont* fonts = [UIFont fontWithName:fontName size:size];
UIFontDescriptorSymbolicTraits symTraits = fonts.fontDescriptor.symbolicTraits;
return (symTraits & UIFontDescriptorClassTransitionalSerifs) != 0;
}
- (BOOL)isUIFontDescriptorClassModernSerifs:(NSString*)fontName size:(float)size {
UIFont* fonts = [UIFont fontWithName:fontName size:size];
UIFontDescriptorSymbolicTraits symTraits = fonts.fontDescriptor.symbolicTraits;
return (symTraits & UIFontDescriptorClassModernSerifs) != 0;
}
- (BOOL)isUIFontDescriptorClassClarendonSerifs:(NSString*)fontName size:(float)size {
UIFont* fonts = [UIFont fontWithName:fontName size:size];
UIFontDescriptorSymbolicTraits symTraits = fonts.fontDescriptor.symbolicTraits;
return (symTraits & UIFontDescriptorClassClarendonSerifs) != 0;
}
- (BOOL)isUIFontDescriptorClassSlabSerifs:(NSString*)fontName size:(float)size {
UIFont* fonts = [UIFont fontWithName:fontName size:size];
UIFontDescriptorSymbolicTraits symTraits = fonts.fontDescriptor.symbolicTraits;
return (symTraits & UIFontDescriptorClassSlabSerifs) != 0;
}
- (BOOL)isUIFontDescriptorClassFreeformSerifs:(NSString*)fontName size:(float)size {
UIFont* fonts = [UIFont fontWithName:fontName size:size];
UIFontDescriptorSymbolicTraits symTraits = fonts.fontDescriptor.symbolicTraits;
return (symTraits & UIFontDescriptorClassFreeformSerifs) != 0;
}
- (BOOL)isUIFontDescriptorClassSansSerif:(NSString*)fontName size:(float)size {
UIFont* fonts = [UIFont fontWithName:fontName size:size];
UIFontDescriptorSymbolicTraits symTraits = fonts.fontDescriptor.symbolicTraits;
return (symTraits & UIFontDescriptorClassSansSerif) != 0;
}
- (BOOL)isUIFontDescriptorClassOrnamentals:(NSString*)fontName size:(float)size {
UIFont* fonts = [UIFont fontWithName:fontName size:size];
UIFontDescriptorSymbolicTraits symTraits = fonts.fontDescriptor.symbolicTraits;
return (symTraits & UIFontDescriptorClassOrnamentals) != 0;
}
- (BOOL)isUIFontDescriptorClassScripts:(NSString*)fontName size:(float)size {
UIFont* fonts = [UIFont fontWithName:fontName size:size];
UIFontDescriptorSymbolicTraits symTraits = fonts.fontDescriptor.symbolicTraits;
return (symTraits & UIFontDescriptorClassScripts) != 0;
}
- (BOOL)isUIFontDescriptorClassSymbolic:(NSString*)fontName size:(float)size {
UIFont* fonts = [UIFont fontWithName:fontName size:size];
UIFontDescriptorSymbolicTraits symTraits = fonts.fontDescriptor.symbolicTraits;
return (symTraits & UIFontDescriptorClassSymbolic) != 0;
}
现在,如果你是 super 硬核并且想更深入,你可以使用这个:
UIFont *font = [UIFont fontWithName: @"HelveticaNeue-Medium" size: 12.0];
CFArrayRef fontFeatures = CTFontCopyFeatures((__bridge CTFontRef) font);
NSLog(@"properties = %@", fontFeatures);
上面的方法将返回一些非常简洁的字体特征,这些特征与上面的不同。 Apple 提供了一个很好的指南:
为了玩得开心,让我们打印出所有字体描述符:
https://gist.github.com/anonymous/f6ddb0f525b513b10941
格式如下:
2015-08-27 05:32:28.681 [25332:2371074] Marion: ( "Marion-Italic", "Marion-Bold", "Marion-Regular" )
2015-08-27 05:32:28.681 [25332:2371074] UIFontDescriptorClassMask
2015-08-27 05:32:28.681 [25332:2371074] UIFontDescriptorClassSansSerif
2015-08-27 05:32:28.681 [25332:2371074] UIFontDescriptorClassOrnamentals
2015-08-27 05:32:28.681 [25332:2371074] UIFontDescriptorClassScripts
2015-08-27 05:32:28.682 [25332:2371074] UIFontDescriptorClassSymbolic
关于ios - UIFontDescriptorSymbolicTraits : Printing out ALL of them FOR an Entire Font family,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32247648/