ios – 如何找到包含给定字符的字体?

前端之家收集整理的这篇文章主要介绍了ios – 如何找到包含给定字符的字体?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个字体,我用于我的应用程序,只使用英文字符.我使用CoreText来显示文本,我注意到只要有人输入了字体中没有包含的字符(比如阿拉伯字符),程序就会挂起来:
  1. CTFramesetterCreateFrame(textFramesetter,CFRangeMake(0,0),textMutablePath,NULL);

我有一些问题:

>是否可以知道字体中是否包含某个字符?
>系统是否可以找到包含未知字符的字体?

相关:Check if certain character is supported by UIFont

解决方法

1)是否可以知道字体中是否包含某个字符?
  1. BOOL FontContainsCharacter(UIFont *font,unichar character) {
  2. NSCharacterSet *characterSet = [font.fontDescriptor objectForKey:UIFontDescriptorCharacterSetAttribute];
  3. return [characterSet characterIsMember:character];
  4. }

2)系统是否可以找到包含未知字符的字体?

  1. NSArray *FontDescriptorsForFontsContainingCharactersInString(NSString *string) {
  2. NSCharacterSet *characterSet = [NSCharacterSet characterSetWithCharactersInString:string];
  3. NSDictionary *fontAttributes = @{UIFontDescriptorCharacterSetAttribute:characterSet};
  4. UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithFontAttributes:fontAttributes];
  5. return [fontDescriptor matchingFontDescriptorsWithMandatoryKeys:nil];
  6. }

例如:

  1. NSLog(@"%d",FontContainsCharacter([UIFont fontWithName:@"Helvetica" size:12],0x0041)); // "A"
  2. NSLog(@"%d",0x4F60)); // "你"
  3.  
  4. for (UIFontDescriptor *fontDescriptor in FontDescriptorsForFontsContainingCharactersInString(@"你好")) {
  5. NSLog(@"%@",[UIFont fontWithDescriptor:fontDescriptor size:12].fontName);
  6. }

输出

  1. 1
  2. 0
  3. STHeitiSC-Light
  4. STHeitiSC-Medium
  5. STHeitiTC-Light
  6. STHeitiTC-Medium
  7. HiraKakuProN-W3
  8. HiraKakuProN-W6
  9. HiraMinProN-W3
  10. HiraMinProN-W6

猜你在找的iOS相关文章