2015-08-27 1 views
0

Donc, j'ai travaillé sur mes polices et il se avère que j'ai besoin d'un moyen d'être en mesure d'imprimer TOUS les UIFontDescriptorSymbolicTraits pour une police spécifique. La façon dont il est mis en place maintenant, c'est que vous ne pouvez que deviner à laquelle des 21 caractères symboliques qu'une police peut poser afin de déterminer si une police est supportée pour quelque chose comme UIFontDescriptorTraitExpanded, il ne semble pas y avoir de moyen simple de faire quelque chose où je branche un nom de police et par magie le UIFontDescriptorSymbolicTraits apparaît dans le débogueur. Maintenant, je peux interroger ceci pour une police et cela retourne les valeurs numériques "enum" mais cela semble être quelque chose qu'Apple a déjà à notre disposition, mais j'arrive sur des impasses. Je ne peux obtenir que les valeurs numériques enum et rien d'autre. J'utilise cette méthode ci-dessous un par un pour trouver ces traits et il est assez ennuyeux:UIFontDescriptorSymbolicTraits: Impression de tous pour une famille de polices entières

UIFontDescriptor *helveticaNeueFamily = [UIFontDescriptor fontDescriptorWithFontAttributes: @{UIFontDescriptorFamilyAttribute: @"Helvetica"}]; 

helveticaNeueFamily=[helveticaNeueFamily fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitExpanded]; 
NSArray *matches = reallyMatchingFontDescriptorsWithMandatoryKeys(helveticaNeueFamily, nil); 

Toute aide serait appréciée. Merci!

Répondre

1

Voilà comment je le fais, cela est beaucoup de code, mais c'est correct, le travail a déjà été fait:

La principale méthode, par exemple, si vous voulez voir tous les descripteurs symboliques, il est cette :

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

Méthodes, cela fonctionne avec la méthode ci-dessus, et retourne ce que vous cherchez. Vous pouvez l'utiliser en utilisant simplement les méthodes ci-dessous, puis de brancher le nom de la police et sa taille, mais la boucle ci-dessus montre tout pour toutes les polices système:

-(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; 
} 

Maintenant, si vous êtes super hardcore et voulez pour aller plus loin, vous pouvez utiliser ceci:

UIFont *font = [UIFont fontWithName: @"HelveticaNeue-Medium" size: 12.0]; 
CFArrayRef fontFeatures = CTFontCopyFeatures((__bridge CTFontRef) font); 
NSLog(@"properties = %@", fontFeatures); 

cette méthode ci-dessus renvoie des caractéristiques très nettes de polices qui sont différentes de celles ci-dessus, en quelque sorte. Il y a un excellent guide que Apple a sur ceci:

https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009542

Et juste pour vous amuser avec cela, permet d'imprimer tous les descripteurs de police:

https://gist.github.com/anonymous/f6ddb0f525b513b10941

est le format ici:

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

27/08/2015 05: 32: 28,681 [25332: 2371074] UIFontDescriptorClassScripts

2015-08 -27 05 : 32: 28.682 [25332: 2371074] UIFontDescriptorClassSymbolic

+0

Je pensais que peut-être vous avez dû faire quelque chose comme ça, j'ai cherché une solution à 5 standard liner et il n'y a littéralement rien là que Apple a mis en place, mais cela ne En fait, les gens ne réalisent pas à quel point il est difficile de savoir ce que font vos polices, c'est génial! –